﻿/*!
 * @(#)jQuery math plugin
 *
 * fengxianwen@gmail.com, 2009-11-27 23:20:20.
 *
 * Depends: jquery.js 1.3.2+
 * 
 */
(function($) {
  $.math = $.math || {};

  // ---------------------------------------------------------------------------
  // The pseudorandom integer generated is from min (inclusive) to max (exclusive)
  $.math.random = $.math.random || function(min, max) {
    return Math.floor(Math.random() * (max - min) + min);
  };

  // permutation
  // ---------------------------------------------------------------------------
  // 产生从n个元素中取m个的排列
  // returns [][]
  $.math.pnm = $.math.permutation = function(n, m) {
    var rt = [], v, i, j, k, l;

    if (m < 1 || n < m) return rt;
    if (m == 1) { for (i = 1; i <= n; i++) rt.push([i]); return rt; }

    v = $.math.pnm(n - 1, m);
    for (j = 0; j < v.length; j++) rt.push(v[j]);

    v = $.math.pnm(n - 1, m - 1);
    l = v[0].length;

    for (j = 0; j < v.length; j++) for (i = l; i >= 0; i--) {
      m = [];
      for (k = 0; k < l; k++) {
        if (k == i) m.push(n);
        m.push(v[j][k]);
      }
      if (i == l) m.push(n);

      rt.push(m);
    }

    return rt;
  };

  // combination
  // ---------------------------------------------------------------------------
  // 产生从n个元素中取r个的组合
  // returns [][]
  $.math.cnr = $.math.combination = function(n, r) {
    var rt = [], v;

    if (r > 0) for (; n >= r; n--) {
      if (r == 1) rt.push([n]);
      else {
        v = $.math.cnr(n - 1, r - 1);
        for (var j = 0; j < v.length; j++)
        { v[j].splice(0, 0, n); rt.push(v[j]); }
      }
    }

    return rt;
  };

  // combination X
  // ---------------------------------------------------------------------------
  // 产生多组元素运用乘法规则的有序组合
  // a 整数数组, 表示需要应用乘法规则的各组元素数量
  // returns [][]
  $.math.cx = $.math.combinationx = function(a) {
    var rt = [], i, j, k, v, x;

    if (a.length < 1) return rt;
    if (a.length == 1) { for (i = 0; i < a[0]; i++) rt.push([i]); return rt; }

    v = a.pop();
    a = $.math.cx(a);

    for (i = 0; i < a.length; i++) for (j = 0; j < v; j++) {
      x = [];
      for (k = 0; k < a[i].length; k++) { x.push(a[i][k]); }
      x.push(j);
      rt.push(x);
    }

    return rt;
  };

  // ---------------------------------------------------------------------------
  // shuffling
  $.math.shuffling = $.math.shuffling || function(x) {
    t = (x ^ (x >> 8)) & 0x0000ff00; x = x ^ t ^ (t << 8);
    t = (x ^ (x >> 4)) & 0x00f000f0; x = x ^ t ^ (t << 4);
    t = (x ^ (x >> 2)) & 0x0c0c0c0c; x = x ^ t ^ (t << 2);
    t = (x ^ (x >> 1)) & 0x22222222; x = x ^ t ^ (t << 1);
    return x;
  };

  // ---------------------------------------------------------------------------
  // unshuffling
  $.math.unshuffling = $.math.unshuffling || function(x) {
    t = (x ^ (x >> 1)) & 0x22222222; x = x ^ t ^ (t << 1);
    t = (x ^ (x >> 2)) & 0x0c0c0c0c; x = x ^ t ^ (t << 2);
    t = (x ^ (x >> 4)) & 0x00f000f0; x = x ^ t ^ (t << 4);
    t = (x ^ (x >> 8)) & 0x0000ff00; x = x ^ t ^ (t << 8);
    return x;
  };

})(jQuery);

/*!
 * jQuery rchis plugin.
 *
 * fengxianwen@gmail.com. 2009-7-11 11:24
 *
 * Depends: jquery.js 1.3.2+, jquery.math.js
 *
 */
; (function($) {

  $.extend({
    keyCode: {
      BACKSPACE: 8,
      TAB: 9,
      ENTER: 13,
      ESCAPE: 27,
      PAGE_UP: 33,
      PAGE_DOWN: 34,
      END: 35,
      HOME: 36,
      LEFT: 37,
      UP: 38,
      RIGHT: 39,
      DOWN: 40,
      INSERT: 45,
      DELETE: 46,
      NUMPAD_0: 96,
      NUMPAD_1: 97,
      NUMPAD_2: 98,
      NUMPAD_3: 99,
      NUMPAD_4: 100,
      NUMPAD_5: 101,
      NUMPAD_6: 102,
      NUMPAD_7: 103,
      NUMPAD_8: 104,
      NUMPAD_9: 105,
      NUMPAD_MULTIPLY: 106,
      NUMPAD_ADD: 107,
      NUMPAD_ENTER: 108,
      NUMPAD_SUBTRACT: 109,
      NUMPAD_DECIMAL: 110,
      NUMPAD_DIVIDE: 111,
      EQUALS: 187,
      SUBTRACT: 189,
      PERIOD: 190
    }
  });

  // all defaults
  // ---------------------------------------------------------------------------
  var defaults = {

    msg: {
      version: "1.0.2",
      e: { // error
        '000': '[E000] 出现未知错误。',
        '001': '[E001] 执行Ajax请求出现错误。',

        '900': '[E900] 不存在 CellWeb 对象。',
        '901': '[E901] 请启用 "CellWeb5 Control" ActiveX 控件。',
        '902': '[E902] Cell ActiveX 注册失败。',

        '999': ''
      },
      s: { // status
        '400': 'Bad Request',
        '401': 'Unauthorized',
        '402': 'Payment Required',
        '403': 'Forbidden',
        '404': 'Not Found',
        '405': 'Method Not Allowed',
        '406': 'Not Acceptable',
        '408': 'Request Timeout',
        '409': 'Conflict',
        '413': 'Request Entity Too Large',
        '414': 'Request-URI Too Long',
        '500': 'Internal Server Error',
        '504': 'Gateway Timeout'
      }
    },

    enterQueue: {
      keyCode: {
        R: 13,
        N: 10
      },
      data: []
    },

    forceNumber: {
      options: {
        min: 0,
        max: 18446744073709551615, // 2^64 - 1
        scale: 0                   // decimal places
      },
      keyCode: $.extend({}, $.keyCode),
      validChars: '0123456789-.'
    },

    Initial: {
      py: 'YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY',
      wb: 'GSGAHGDDDDHGGGGGGNVFEGAGRGOWAXBGUGTGGGUFHNWUUKNEDNKKJOYUVMYYFGITYYQENQNTTYTPQTTTQTRRTRTTTNNNNVTBNXMXGTNUCHNLADQTNTUERUGIBFRYIFFEQFEOFHBQCQGGFFGFFFGFGFFMGGGHGCGBYYYYUYYUYYYYYYYYYYUYYYYUYYWWWWWWWWWWDWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWHWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWSWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWFWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWGWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWQGCAFKYIQTIWDWQTDHUVAQMUUFDIDQDDTUDDDITTMWGWWWUWUUAGUIRAHMUWUUUUUUUMMMMMDMMMMMGMMJMJFJJPPPPPPPPPPPPPPPPPPPPPUTDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMMTHMNTMMMMQMWMMMMMWUBQFHMBFIBBOVNJVVVWAQTFTFQQRMGAFNVEGYMMWXPEVMNWCUKFFQTMKGCTGGFFDEBRNUQGYFWGMMMYUGGYMKWIDGUQUKWATJDUAAUGMPXDCYOEWYVDNDTUYMNMGTWPAMWXUGNFMCSAVCWDVTLYHNQWKHWWIAYWTWRQTYXNLLCLALTDIRYLRFEVFQVRDRDCAIURUFUCAFGYRDGTFTGYCCQDKUYFUBSAXDTJJACAKWEOANSFGAXVRQATTUUHYLATTHDTYAQQQQQQQQQQQQQQQQQQQQQQDQQQQQXWUXJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNTAGVTTFUFGNWFNRYHFUFFIAFXHGYKHHHHHHFAHBBBQARQQQVVFQQURTBWGRKQSWDQDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDIDDCDCVDFCCNEGCCCCCFFCCEDCRNNTNCGHCBEYWNUPFNVCHOKDQKKKKKKVKKSCKKDVAKKNKKKKKBKKKYKTKKKWFKKMQRGKTKKKKKKKKKVKYGKKKNKKKGKKKKWKKKYKKKKKKKKKKKKKKGRKKKKEKKIKKTKKKKKKTKKKKKKKKKKKKKKKKKKKKKKMKKKKKKKHKKKKKKKKKKKKWKKKKKKKUKKKKKKTKTKKKKKKKKKKKKKKKKKKKKKKKKKUKKNKKKKKKKKKKKKDKKKMKKKYKKKKKKKKFKKKKKKKKKKKKKKKKKKKKKKKKKKKSKKKKKKKKKKKKRKKKKKKKKKKKKLKKKKKKKDKKKKKKKKYKKKKKKKDKKKGKKFKKKKKKKKKKKKKKWKKKKKKKKKKKKKKKKKKKKKKKUUKKKKKKTUKKKYYKKKKHKKKKKYRKKKKKKKKKKKFKKKKKKKKKKKKKKUKKKKKKKKUKFKKKKKKKKKKKKKKKKKKKKKFKKKKKKKKKKKKKFKTKKKKKKKKKIKGKKKKKIKFKKKKKKFKKKKKKKKKKKKKKKKKKKKKKKKEKKKKKKLKKKKKFKKKKKKKKKKGKKKKKKKKKKKKKKKKFKKKKKDKKKKKKKIKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKEKKKKKKKKKYKKKKKKKKKGKKKKKKKKKKKUKKKKKKKFKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKFKKKGKKKKKKKKKKFXKKKYWKKKKKKKKKKKKKKKKKKKKKKGKKFKAKKKKKKKLMLLLLLLTLLLLLLLLLLTLMLLLLTLLLLLLLLLLLLLLLLLLLCLLLLLLLLLLLLLLLLLLLLLLLLLFFFFCFFFDDFFFFFFFFTFFFFDFFFFFJFFFFFFFFFFFFFFFWFFFWFXFIRFFFGJFFFFFBFFIFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFTFDFFFWFFGFFFFUFCFSRFFFFFFFFFFFWFFFFVFFGFRFFFFFFFFFFFFFFFFTIFFTFFFFBFFFFMFFFFFFRFFFFFFFFFFSFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFBIFFIYFAFAFFGFFFFSFLFFFBFFFFFFFFFFFWFFFCFFFFFFFFFFFFVFFFFFFFFIFFFFFLFFFFFFVFFOFEFFFUFFFFFIFFFFFFPAFFFIFFBFFFFFFFFFIYFFFYFFFLYFFFYFFFFFFJFFFFFFFRFNFFFAFFFFFFFFBFFFFFFFFFFFLFYFBFBNFFFFFFFFFFFFGFEFFNNFSYWFFFFFFIFFGHFDFFFFLFFFFFFUFHFFFFFFLFFFTFUNFFFFFFFFFFFFFFFFFFTETTTTTYQCFTWDQODVUQQQQMQVYQQQQQAYQJADGGDFNTMDDRDDUDDGDGDDDDDDGDQDDDDDDDFDHUDDQDDDDYUDNCEDDDDDUDDGDTCTUDDDNDDDLXDVVVVVVVVVVVVVNVVVYVUVVVVVVVVVVVVVVVVVVVVBVNVJVVVVVEVVVVVVVVVVVVVVQVVVVVVGVVULVVVVVVVWVVVVVVVVVVVVTHVVVVVVUVVVVVVVVVVVVVVVVLVVVVVVGVVVVVVVVVVUVDVVOVVVYVVVVVRVVIVVVVVVVVVVVVVVVVVVNVVVVVVVVVVVVVVVVVBVVVVVVVVBVKVVVVIVVVVVVVVVVVVDVVVVVVVVAVVVVVVVVVVVVVSVVVVGVXVVMVVVVVCVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVTVVVVVVVVVVVVVVVEVVVVVVVEVVVVVTVVVVVVVVVVVVOVVVVVVVVGVVVVVVVVVAVVVVFVFVVVVVVVVVVVVGVVVUVVVVVVVVVVVVVVVEVVVVVVAVVVVVVVVVVVNVVVVVUVVVVVVVVVVVVVVVVVDVMILVYVVVVVVVVVVVVFVVVVVVVVVVXVVVBBBBBEBPDBEFBFBBNBBTBVIXBBYBGBBAYNBUBQYFWNBBBABXPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPFCFVNEYDAFGGTDUNGNUVFOUIIIWTQEIHIIIIIIDJAIDWDDWADWDGDFDDDYDDDDGDNVNNNNNNNNNNNNNNNNNNNNNNNNNNRNNNNNNNNNNNNNNNNNNNNNNNNNBGUMTTMMMMMMMMMMMMMMMMMMMMMMCMMMMMMMMMWMMMMTMQMMMMMMMMMMMMMMMMMMMMMWMRMMMMMMMMMMMMMMMIMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMYMMMMMMMMMMQMMMMWMMWMMMMIMMMMMMMMMPMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMTTMMMMMCMMMMKMMMMMMMMMMMWMMMMMOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMGMMMMMMMMMMMMMMMMMMMMMMMMBMMMMMMMMMWMMMMMMMMMMMTMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMMMMMVBKYYGVVIVADAAAAAAAUCGNNNCRVAABNUCNMGGTYDMJMVJMMQQYMMMVWMMMMMPMVRMUMYVMMUVWGMMMMWVYDGYMMMMMAMIMMMMMMMMMPMMMMFMMMTMMMMETMMMAMMMMDMMMMMMMMUIMNMMMMFMMMMMMFGRFUTFFXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYPVTTMRVLSMAAGCNYGWFWYNUAAAAAGQQXXXXXXXUXXXXUXXXXXXXXXVXXXXUYXXXXXXXXXXXXXXXPFXOXXXUXXXXXXXXXVXJIXVXDXXVVXXVVVEGYMYUAGEHMSFPSUJGTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTNNNNNFNNNNVTNHGANNNNFYNNNYGYNKNGNNRNNNWNNNNNNNNNNNWNNNNNNNQNWNDWNNNNNNNNNNNTNNNVNNNNNDNNNNLNNCNNRWQNNQNNNNNNNNQNNNNNFSWNUCNNNNWNNNNNNNNNYNNNVANNNNVTNNUFNNDNNNNNUNBNDNLNNNANTNNNVYGGWNNNNNNNCNNNNNNWNNTRNNNNNQNNNNNNNANNNNNNNWTNKTYNNWNGFENNNNNDFNNUNNPNNNNNNNSNNHNNNNINNPNANNATNNNJNNNNNNNNNGGNTNVNNNTFTNNNNNNNSNNNDNANNNNNNNTFNNNTNWNNNNNNUNNNNNNNCNPJENNNDNNNNNNNNFNNNUNNNNNNHNNNNSNNBNNNDNLINNNNRUNNCNNNNANNNNANGNLNNTANNNNNNFNFDNNNTNGHNNNNNNNYNAFNNDNWUNNDDTTNTNNWUQNNNNUNNNNSSNFNNNYNNDNNNNONNNTNNNNNNNNPNNNNNNNNNANNNNNNANNNENYNSNNNNNINNNDQNINNNNNNONNNINNNNNNNNYNNGNNTNNNNNHNNNNNNFXANNNUUUAADGDDACDTAAANAWHMDDAMDFUAKWEJIWSGFDGPNHKHHNFHRYGYYYAYYYRYYYYYYYYYYRRFRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRBRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRVRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRAURRRRRRRRRRRWRRRRRRRRDRRRRRRRVRRRRRRRRIRYRRRRRRRRRRRRRRRRRRRRRRIRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRIRRRRRRRARRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRDRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGRRRTRRRRRIRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRTRRRRRRRRPRRRRRRWRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRYRRRRGFFRRRRRRRRARRRRRRFRRLRRURRYRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRLRRRARRRRRRRRRNRRRRRRRRRRRRARWRRDRRRRRRRRRRRRRRRRRRRRRSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRXRRRRRRRRRRRFFUDFHTNGWNNAFWYGRHQNCDWGUOHTTWQTDFWWGGGMWFUWWUIMCJNAJOYDUICRAJTNOMYMGUBGKHAQFTUTLLWUFWWYYYYYYYYYDGYYYYYUQOCQWKVAFFALRRRWNLQDLOAAUFNAOQRXNYYYYYYYYUYYYYYYYGYYYYYYYYYYYYYYYYYYYYYYFAVRMJJHXJJJQVVJJJJJJJJJJBJJJJGJJJJJJJJJJJJTJJJQJJJJAJJJJJDJJTJJJJJJJDJJJJJJNJJJJJJJJJYJJJJJNJJJJJJJJJJJJGJGJJJJJJJJJJJJJJJJJVJJJJRJJJJJJJJJJJUJJJJSJYJJJJTJJJJJJJLJJJJJJJJNJJJJJJJCJJJJJJJJUJJJJJJJJJDJVJJLFJAJJJJJJJJJJJJJUJJJJRJJJJDJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJXJJJJJJMJGJQJVGGJJUUFJAJWJFUWEDEEEEEEEEEEUEEYELYYEFAAEEAEEEEESSFGSSFSSRSSSMESSSSSSSSGQSVSSSSSSSSSSSSSSSSSSSSYNSSSSSSGSTSSSGSSSSSSSSSSSGJSSSSSSSSSSSSSWSSSSSSSXSSSSSSSSSSSSSSSSSSSJSSSSSSGSSSSSSSSSQSSSSCSSSLSSSSSAFSSSSSSSSSSSSSWSSSSASIICSSSSSSSSSSSSSSSSSSSSSSSGSSSSSSSHSSSSSSSSSSSSSSSISGSSSSSSSSSSSSSDSSSSSSSSSGSWSSSSUSSSSSSSSSSSSSSSSSSSSSSSFYSQSSSSSSVPSUSHSSSSCFSSSSSSSSSSSSSSSSSSSSSUSSSISSSSSSSSSSSSSSSSSSSSISSSSSSSSRSSSSSSSSSSSSSSSSSSWSTSSSSSPSSTSSSSSSSSSSSSSSHSSSSSSSSSSSTYSSSSSASSSSSDSSSSSSGGSSSSSSSISSSSSSSYSSSSSSSSSSSSSSSBSSASSSSSSSSSSSSSYSSSSSSSSSSSSSSSSSSSFSSLSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSCSSSSSSSSSSSSSSSSSSSSOSSSSSSSSUSSSSSSRSSSSSSSSSSSSSSSSSSSSSSSSFSTSSSSSSSSSSSSSFSSSSSSSOSSSSSSSSSSSESSSSSYSSTSSSSSSUSSSSSSKSSSSFSSSSSSSSSSSSSSSSLSRSSSSSSSSSNSSSFSSSSFSSSSSXSSSSSSSSSSSSSSSSSSSWSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRSSSSSSSSSGSSSSSSSSSSSDSSSSSSSNQSSSSSSSSSSSSSSSSSSSSSSSSSSSSSBSSSSSSSSSSSSSSSSSLSNSSSSSSSSASSSSSSSSSSSSSSSSSSSSSSSSSSSSSODSSSSSSSSSSSSSSSSLSSSSSSSSSSSGSSSSSSSSSSSSSSESSSSSBSSSSSSSSSSSBSSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSQUCRGJWAQVBRYLUFTWWHYXGQCDAOCQFQSAMTMSUJWUYRSWAAAHURHFFVOWUWLLJWCAHGHHGHHHGHHHHHVHHHDHHDWGHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGMAWYRFAQFFQFNVVFYLUAVQAFXXXTTFXGTXXXLLXQTTTXILTTNWTBTTTTYTGRTTTCTTCTJTWTDJTJCKTFUCITTYKTATHLQQNQYRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRIIBYYNIIIWIIIIFIIITIIIIIIIIIIIIIIIMIIIIIIIAIIIIIIIIIIIIIFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPIIIIIIIIIIIIGIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIRIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDIIIIDIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITIIIIIIIIIIIIIIIIIIDIIIIIIIIIIIIIIIIIIIIIIUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIQIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOIIIIIIEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFIIIIIIIIIIIIIIIFIIIIIIIIIIIIIIIIIIIIIFIIIIIIIIIIIIIIIIIIIIIIIINIXIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIWIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIXIIIIIIIIIIIIIIIIIRIIIIIOOGOODOOQOVOOQOOFOVPOOAOWOJOOOOOOOOOOOOOOOOOAOQJOOOOOOOOOOOOOOOOOOMOOQCOOOOOOOHYOOOOOOOOOOOOOGQOWOOGWOOOOODFOOOOOOBOOOOOOOOOOOOOIORGOOOROOOOOOYOOOOOOOKWOVOOOYGONOORBOOOOOOOODOSUOOOOOROBYOWOOOOOOOOOOOOOOOQOJOOOOJOOOOOOOOOOOOOOOOUOOFOOOAOOOOJHOOQOOOOOOOJJOOOOOVFOOOWOOOOOOOOOOOOOOOOCOOOOTOCCOOOTOOOOOOOOOAOOOOOYOOOOOOOTNOOOGDOOOFXOOOOOOFOOOOOOOOOOQFOOOOOOOOOOOOOSOAOOOIONOOWOOOWOOOOOOOOOOOOOOOOOOOOOOEOOOOFOOOWOOOOAOOOOOOOOOOQOOOOOOOOOOOOOOOYOOOOOWOREREREEEEELEWWWWWQQDGNNNNNNNNTTTTTTTTTTTTTTTTTTAIRTTTCTTPTTTTTTTTTTTWTTTTTTDUTTTTTTYTTNTTTTTTRTTTTTTFTTTTTTTOTYTNFTTTXTTTTTTTTWTTWDQDQQQQQQQUQQQQQQQQQNQQQQQQQQQHQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDQQQQDSQQQQQJQQQQQQQQQQQQQQQQQQQQQQQQQQQFQQQQQQQQUQQQQQQQQQQQMQQQQQQQQQQNQQQGQQQQQUQQQQQQQQQQIQQQQQQQQQQQQQQQQQQQQKQQHQQQQQQQQYYYYYGGGGTGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGQGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGJGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGOGGIGGGGGGGFGGGGGGGGGGAGGGGGGGGGGGGGGGGGGGGGGGIGGGGGGGGGGGGGGGNGGGGGGGGGGGGGGGGGGWGGGGGGGGGGGGGGGGGGGGGGGGGGXGGGGGGRRRRDFSUYRGGAGGWYPWAGGGDWCUUGKDQGITUTTYTSGUOTUKUAAGFOURNQYMHAAAATHITJTYUETGTEETGCGQPLMLJJJTLQMLGLLVLLMLJIJYLLLLLLLLLGOYILLLYLQCLYYFLRLJWLLLLOLTVWLLLLGWLLVILLLGLLLLXVLLLLLXLGLLNGNNNFXUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWWWWWWWRDRRRRRRRXRRRRRRRRRRRRRRDRRRSRRRRRRRRRRRRRRRRRRRRHHHQPFCASFPHQHFYFLHEGGXKWDETUDQFMGFJWIDIUUTGFDIVAJXVLATQWHEFIWAXHHHHYHFHHHSHHHHHRHHIHHHHHHHNHRHHHHHHHHLHHHDHTHHHXFHHQHHHHHHHHHHHHHHHHHHHHUHHHHHHLHUHWHHHHHHHHHHHHHHHHHHHHHLHHHHTHHHHHHHHHHHHLHHHHNHHHHHHHHHHHHHHTHCHRHHHHHHFHHHHHLHHHHHHAHHHHHHHHHHHAHHUHHHHHHHHHHHHHHHHHHHHHHHFHHHHHHHHHHHHHHHHHHHHHHHXHFHHHCCCCCCCTCXTQTTTTTTTTTTTTDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHDDDDDDDVDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDRDDDDDDIDDDDDDDDDDADDDDDADDDDIDDDDDDDDDDDDDDDDDDDDDDDKDDDDDDDDGDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTDDDDDDDDDDLDDDDDDDDDDDDYDDDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDLDDDDDWDDDDNDDDDDDWDDDDDDDDDDDLDDDSDDDDUDDDDDDDDFPPPPPPPPPPPPPPPPPPPPPPPPPPPPPFPPPPPPBPHPPPPPPSPPPPWPPPPPPPPPPPPPPPPPPYSPPPPPPPPPPPPPPPPPPPPPPPPPPOPPPPPPPPPTPPPPPPPPPPPPPPPPPMTJYHWTTTTTTTTTTTTTTOTTTTTTTTTTTTTTTTTTTTTTTTTDTTTTTTTTTTTTTTTUTTTTTTTTTTYTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYTTTQTTTTTTTTTTTTTTTTTTTTTTTTTTYTFTTTTTTTYTTTQTXTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPUUUUUUUUUUUJUUUUUUUUUUUUUUUUUUUAUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTOTOOOOOOOOOOOOOQOOOOOOOXOOOOOOOOOOOOOOOOVBOOSOOUOTXOOOOOOOOOOOIHOOTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFOOOOOOOOYOOOOOOOOOOOOONOOOOOOBOOTABOXXXTXXXXXXXXXXXXXXYXXXXXXXXXXXXXXXXXXXXXGXFXXRXJXXXHXXSLXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWDXXXXXXXXXXXXXXCXUVXXXXXXXXRXXXXXXXXXXXXXXXXXXXXXXXXXXXXDXXXXXXXXXXXXXXXVXAXXXXXXXYXXXXXXXXXXXXXXXXXXXXXXXXXXXAXXXXXTXXXXXXXXXXXRXXXXXXXXXXXXXXXXXXXXXXYXXXXXXXXXXXXXXXXXXXXOXXXXXXTXXXXXXXXXXXXXXXXFXEHXXXXXXXXXXXXXXXXXXFXXXXYXXXXXTXXAXXEXXXLXXXXXXXXXXXXXXXGXXXXNXXXAXXXXXXLXAXXXXXXNXXXXXXXXXXXXXTXXXXOXXXXXLXXXXXXXXXXXXXGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRMOFRRRRRLYMLRRRMLMMPLLLPLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLUGUDUUGUUUUUUUEUUUUUUUUUUVVUUUUUUUUUUUUUUUUUUUYUUUNNNNNWNDNFNNLSUNNNWNNNNFUWWQAMNWNPNNNDMNKFUPNYNNNNGNFRSANNROFFTTNHLFIFFFFFFFFFFFDDDDDMDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBBBBDWBBBBBBBBBBBBBBBBBBDBBBBBBBABBBBBBBBBBUTBBBBBBBBBBBBBBBBBGFTBBBBBBBINBUVVYGVXVDYYMEEEEPTEEEYEEIEEKEEEEEEEEEEEEEEEYEEEEEHEEYEQEEEEEEHEEJEEEELMEEEEEEEUEEEEEEEHEEEEEEEEEEEEDEETNEEEEEEVEEEEEEEEEEQEEEEECFEBEEEELEEEEIVEEEEEEEEYEEEEEEEEEEEEEEDEEEEEWEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEYEEEEEEEEOEEEYYEEEEEEEEEHEEEEEEEEEEGEEEEEEEEEEEEEEEEEEEEYEEEEENENEEEEEEEENEEEEEEEEEEWEEEEEEYEEXAEAAANDANTTTTTTTTTGGGGFGGFGVQVTEVDVVVWWWWAWTWWTTTWTTTWWWTTQENRTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTVYCAQDXUMDBAAAAAAAAAAAAAAAGAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAHHHHHRVHHHHHHHHHHHKUHEGHHAHHIHJJJJJJNJJJJJJJJGJJKJDQJJXJJJJJYJJJJJJJJJJJGJJJJJJJJJJWJJJCJJJJBJJJJJJJJJJJJJJJJJSJJJJJJJJJJJJJJJNJIJJJJJFJJJWJJJJJJJJJJJJJJJJJADJAJYJRJJJJJJJJJJJJJJJLJJDJJJRJJJJJJJJJTJJJJJJJJDJPAJJJJJJSJJJJJJJJJJJEJJJJJJJAJJJJJJJJGJJJGJJJJJJJJJJJJJJJWJJJJJJJJJJJJJJJCJJNJJJJJJJJYJJJTJJJJJJJJJJUJJJJJJJJJJJTGJJJJFJJJJJJSCJFJJJJYOEYJJJJJJFJJJGJNJJBJAYWJJJJTJNJNJJFJJAJJCJJJJJJJJJJJJGJJFJJJUJJJJJJJJJDJJJJJJJJJJJAJJJEQJJAJJLJXJYJJAJMJJJJJJJJJGJJJJJJJAJSJTJDXDJUBJFJJUEJTJYJJUJJJAJJGGXJIJVTYTTTTTTTTTVTTTTTTTTTTTTTTTTTTTTTTTYPPPPGPPPPPUPYPPPPPPYPPYPPPWPPFPAPQPPLPPWYPPPPPPPPPPPPPPPPPUPYPPPYPPPPPPPYDPPXPYPPPPPPPPPPPPPPFGPPUPPPPWPPPPYPPYPYPPPFPRYPNPIVPPPPPYPPPPPPPPPPPPIDYPPPYPHPRPPPJPPPPPPPPPPPPYYPPYPPPPPPPPPEPPPPPYPPPPBPTPPPYOPPYPPPPPPPPFYPNPPPPPYYPPPPPPPPPPPPPPPPPPPPPPPPPNPPPPPPPPPPPPPPPPPPPUPPPPPPPPPPPGSSSSSSSSSSSSHCIHFHTTEGNPNHQIRIFHFVAOTHMWAKFUUMPOFHLARWUEHUHWHGAPFAMCMFEPHJIMAFMWFAHQQQTQQQQQQHQQQUQDQQQQQQQQQQQQQQDQFQQQWQQXQQQQQYYYYVYYQYYYYYYYYYYYYMYYYYYUYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYHYYYYYYYYYLYYYYYYYYYYYYYYYYYYYYYYDYYYYYYYWYYYYYYYYYYYYYYYYYQYYYYYYYYYYYYYYYIUYYYYYYYYRYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYUYYYYYYAYYYYYYYYYYWYYYYYYYYYYYYYYYYYYYYYYYYYYYTYYYYYYYYYYYYYYYYYYYYYYYEYYPJYYYYOYYYYYYYYYYYYYYYYYYYYYYYYFYYAYYYYYYYYYYYYYGYYFYYXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYRAYYYYYNYYYYUYYYYYYYYYMAWYYYYYYYYTYYYXUYYWTWYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYWTWWWWWWEWPWWWWGGMGMWGGAGDMDDDEEGEUEEEEEEEQUEEEHEEEYCEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEMHCQMAAMMMWWMWXGRGMAMHAKCMLWMMXMMMQLFMWMMMUSMMMYMMMMMMPPMMMMMSFMMIMMYAFMMMMPMRFMMVMMMWMGMMFEMMMMPAMAMMMFGMYMMTDMMMYMUAMMQMDMHMUMMHQCAMGJMMWRMWWMMMXAMFAMKMWQXLMMRSMHWMMUMMMMGMMMFMIMMMYMMGMGMMPADTYMMYUFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFKKKKKDKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKAKKKKKKKKKKKKKKKKKKWKKKKKKRKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKPKKKKKKKKKKKKLKKKKDKKKKKKKKKKKKKKKUKKKKKKKKKKKYKDKKKKKKKKKKKKNKKKKAKKKKKKKKKKKKKTKKKTKKKKAKKKKKKKKKKTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTLLLPGLLLLLLLLLLLLLLLLLLLLLLLLLLLLLCLLLULLLLLLLLLLLLLLLLLALLLLLLFLMLLLLLLLLLLLLLLLLLILLLLLLLLFLLDLLLLLLLLLLLLLLLLLLLLLWLLFLLLLLLLLLLLLLLLLLLLLLLLLLLWLLLXLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLFDILLLLLLLLLLXLLLLLLUDCTNTUGUEBUUUUHUUEUUDDMSKEPGELVFTBDMFTGFTNBFDNGGEGQDFRYARTDGGYKFFFLNHNVATMLJCQMRYRTQSPFCLMDOUYSQFWGQVUTITRUFTTBGHISTEFURWGQGCYCQGRKGTCTLIMGWSDACTPVVRMWYHFTJQFFLGAWJDRUUMNUJJHYPKYMJNRUUFNFKFQVQBLRNFUJKCEXUGUCGGGYEAKNAOUFSNCKKDHTNRAQPLYWGETTVTTQLGKSCNVMFGYVAQYFYWYGVRPDFGOADQQMACRNGGVUGQQOWAFRFDDYWQGFQRFUTFTYGWUYPTDGQKGGETFYDGVKFWMGKUQGRGYMOBUSVSTUXUHQHNFANAUKWSTPWWXXVYPTDYGQTWXKYYKAVYNAGFWGUJWRWUVXUEUQUOTKMOKWMABYFFYDAAQTFAMDTGSSUSSSSSSIWSSSSSSSSSSSSSSSSSSSSFSSSSSSSSUSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSOSSSSUSSSSSSANSSSSSSSSSSSSSSSSSSSSWSSSSTETTTTJTJJFQQQQQQQQQQQWQQQQWQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQHQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJQQQQQQQQQQQQQQQQQQQQQQQQQAQGQQQQQQQQQQQTQQQQQQQQQQQQQQQQQYQQQQQRQQQQQNQQQQQQQQQQQFQIQQQQQQQQQQQQQQQQQWQQQQQQQQQQQQQQQQTRQQQQQQQQQQQQQQAQQQQQQQIQTQQQQQQQQQQQQQQQQHQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQLQQQQQQQQQQQQQIQQQQQQQQQQQQIQQQQQQQQQQQQQQQQCTQQQQQQQAQQQQQQQQQQQQQQQQQQQQQQQQQQQIQQQQQQQQQQQQTQQQQQQOQWQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQGQQQQQQQQQQQYQQQQQQQQQQQQQQQQFLQQQQQQQQQQQQQQQQQQQQQQQQQQQQUBQQQQQQQQQQQQQQQQQQQQQYQQQQQSQQQQQQQQQQQQQQQQQQQQQQQQQQQNQQQQQQQQQQQQLQMQQQQAQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXOQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDDDDDTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBVFSWPWWWCAIDWGDAWYGTQWHYEQHVTWWMKFMWAQYVEBWNYAWWWWFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGUGGGGGGGDDTYDDDDDDDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAWAAAAAAAAAAAAFAAAAACAAAAAAAAAAATGAAAAAAAAAAAAAAAAAAANNNNUNINFNNNNNJNNNNNNNNNNNNFFFFJFFDAFHWYUUUUUUUUUUWFXUDSXVAKFEHGDWFRYCFWGMHUHWGCDWUPTQFTAAHYWNUOIGGIQDETFXVTWGTTHGTEEWPSOBYJYXQWLJPKYPDJMUJTMDCXFFMONSUADFJWYDWHYFAPJHHOBADSXFAKEGFDGRWWYCHWHCFGTWXXYAHITWXXJJJKMUPBAFCJOYFHAMMGMMMMUMMMMMMMMMMMEMMMCMNMMSMDMMMOMAMMMMMUMMMEMSDMNTNNWWUWWWWWQXWWWUWWWWGWWWWWWKWHWWWWWWWWWWWWWUWUUWDWWHWWWWWWWWWWWWWWWWWWWWDWWWWWWWWGWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWYKWXWWWWDWWWWWWQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQUVUTTTTTTTTTTTTTTTFTTTCCUCCCCCCCCCCCCCCCCCCCXCCCCCCCCCQCCCCVCCCLCCCCCCCCCCCKCCCCUCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCYCCCCCCCCCCCCCCCCCCCPCBCCECCCCCCCCCFCCCCCAGCCCCCFCCCCCCCCCCCCCCCCYCACCCCCCUCCCCCCCCCCCCCCCCCCCCCCCCCCCVLCCCKCCCCCCCCCCCCCCCCCCCCCBCCCGCPCCCCCCCCCMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMYYYYYYYDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHHHHHHHHHHQSSGHGAFGGFGXRRRRRRFRRRRDRRRRRRRTRRRRYRRFDIQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQHQQQQQQQQQQQQQQQQQQQQQQUQQQQQQGQQQQQQQQQQQQQQQQQQQQQUQQQQQQQQQQQQQWQIQQQQQQQQQQQQUQQQQQQQQQQQQQQQQQQQQTQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQEQQQQQQQQQQGQQTQQQQQQQQQQVQQQQQQQQUQQQQQQQQQQQQQQQQQQQQQWQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQIQQQQQQQQQQQQQQUUQQQQQQQQQIQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQGQQQQQQQQQUQTQQQQQQQQQQQQWWWWVHDWVCMTFNMKNAFYWFWYGGGGTNWAMPXDAGYGYAWLVWNTWNUCTWQHQKQJEXDWWMPLRPLIWDDTAXPTIFGRUGIWVCWWUWTGTTRBYDNWPEGAKWFWCVQVMTGUTTQTGTGQUWUWEDHEQQRMFAYQQGPDTYWPCJWWYVWGVSGGYYNNJPESOGACUTJDUKXAGRPAJEYPNDAXCHGWXYOKPWWPQYPXQIMUWFUUUEJESXFWRGAWTRFJTGYGKAAGFNYKJDYQRDSKXWFAUHVATTDATYUUNLUCYKWUWUNLYIWRLHYOSNPWGMANQWLWHFUFWMAHGXQVCAKNAAWXPDAHLKMWQQQIQXRDTWTTWYIAFGKTTWUUGAADJREQYYPVDJKMTUNCGEWQIUUPAMYNDWYCKLYYQAAFHHHHHHHHAHYYQYYWYYYYFOYYYYYYYYSYYYGYYYYYYYYYYYYYSGSSSSSSSSSSSSSFSSSGGGYYYYYYYYAAAAAAIAIWTTTTLJLLLLLLJLWLLLLLDLLLLLTILLLLLLLLELATLDLLOOOOMKFFFJFRTPGUKNFJKHPEHFFFFFIFFFFFIFFVIVVVVVVVVVVVVVVVVVVVVVVVVVTTTTTTTTTTTTTTTYYYYYYYYHHHHHHHHHHHHHHHHHHUHHDHHHHHHHHHHHHHHHHHUHHHHHHHHHHHHHHHHHHHUDUYUUDUWUFUDDWTTUQWWWWWW',
      pyx: ['\u3007', 'L'],
      wbx: ['\u3007\uE815\uE816\uE817\uE818\uE819\uE81A\uE81B\uE81C\uE81D\uE81E\uE81F\uE820\uE821\uE822\uE823\uE824\uE825\uE826\uE827\uE828\uE829\uE82A\uE82B\uE82C\uE82D\uE82E\uE82F\uE830\uE831\uE832\uE833\uE834\uE835\uE836\uE837\uE838\uE839\uE83A\uE83B\uE83C\uE83D\uE83E\uE83F\uE840\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uE84F\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F\uE860\uE861\uE862\uE863\uE864\uF92C\uF979\uF995\uF9E7\uF9F1\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29', 'LRDTNNWWQBCKKKINNNRRRRRGASGITDINHTTXPUUFDDVEAPPUYYMMKQQQQQQQUUUUFOHQQQHEGUGGHRNDXYUTYBGFYFMSSFAAJFEQQB'],
      pym: '\u4E01DZ,\u4E07WM,\u4E0DBF,\u4E14QJ,\u4E2CQP,\u4E36ZD,\u4E3CJD,\u4E42YA,\u4E48MY,\u4E50LY,\u4E57CS,\u4E58CS,\u4E5CMN,\u4E79GQ,\u4E7EQG,\u4E80GJQ,\u4E9FJQ,\u4EC7CQ,\u4EE1GY,\u4F1AHK,\u4F1CCZ,\u4F20CZ,\u4F25CT,\u4F3ASC,\u4F3DJGQ,\u4F43DT,\u4F53TB,\u4F59YT,\u4F5AYD,\u4F61XS,\u4F74NE,\u4F85GK,\u4F97DT,\u4FA5JY,\u4FA7CZ,\u4FBFBP,\u4FCAJZ,\u4FDEYS,\u4FDFSQ,\u4FE1XS,\u4FF6TC,\u4FFCYZ,\u5018TC,\u501EJL,\u5055XJ,\u5072SC,\u5074CZ,\u5080KG,\u50B3CZ,\u50E5JY,\u50EETZ,\u513FER,\u514DMW,\u514FCZ,\u5159SK,\u5161BK,\u516AYS,\u5176QJ,\u5179ZC,\u51AFFP,\u51CAQJ,\u51F5QK,\u51F8TG,\u51F9AW,\u5228BP,\u5238QX,\u5239CS,\u5261YS,\u5278TZ,\u527FJC,\u52E6JC,\u52FASB,\u5319CS,\u531AFX,\u5328CZ,\u5339PY,\u533AQO,\u5340QO,\u5352ZC,\u5355DCS,\u5358DC,\u535BSL,\u5361KQ,\u536CAY,\u5377JQ,\u5382CHA,\u5388AC,\u5395CS,\u53A0CS,\u53A6SX,\u53AAQJ,\u53B0CA,\u53C2CS,\u53C3CS,\u53C5CS,\u53E5JG,\u53E8TD,\u53ECZS,\u53F6YX,\u5401YX,\u5403CJ,\u5408HG,\u5413HX,\u5421BP,\u5426FP,\u542CTY,\u542DHK,\u543DOH,\u5446DA,\u5454DT,\u5471GW,\u5472CZ,\u5475HKA,\u5480JZ,\u5489BF,\u5496KG,\u54A5XD,\u54AFGKL,\u54B3KH,\u54BCGK,\u54C5XH,\u54C8HK,\u54D5HY,\u54D7HY,\u54E6EOW,\u5514WN,\u552CHX,\u5574TC,\u558BDZ,\u558FRN,\u5594WO,\u55AEDCS,\u55B3ZC,\u55C4AS,\u55CCAY,\u55D2DT,\u55D5RN,\u55E7JL,\u55FESZ,\u560FGJ,\u5618XS,\u5629HY,\u562CZC,\u5632CZ,\u5638FM,\u563FHM,\u5653XS,\u5666HY,\u5671XJ,\u5684HO,\u5687XH,\u56A3XA,\u56C2XA,\u56DDJN,\u56E4DT,\u5708QJ,\u570FQJ,\u5715TSG,\u571CYH,\u5729WX,\u5734ZS,\u573BQY,\u5747JY,\u574FHP,\u577BCD,\u578CTD,\u57B8HY,\u57D4PB,\u57E1WY,\u57E4PB,\u5800KJ,\u5806DZ,\u580AEW,\u580BPB,\u5815DH,\u5821BP,\u5824DT,\u5828EA,\u5854TD,\u5896TD,\u58AEDH,\u58B1DY,\u58CAHP,\u58DEHP,\u58F3QK,\u590FXJ,\u592FHB,\u5932BT,\u5939JG,\u5940EM,\u5947QJ,\u5951QX,\u5973NR,\u59E5LM,\u5A20SCZ,\u5A29MW,\u5A64CZ,\u5A69YA,\u5A9ETS,\u5ACDTY,\u5AE8HR,\u5B1BHQX,\u5B9BWY,\u5BB6JG,\u5BBFSX,\u5BC0CS,\u5C04SY,\u5C06JQ,\u5C07JQ,\u5C09WY,\u5C22WY,\u5C23WY,\u5C28MP,\u5C3EWY,\u5C3FNS,\u5C4FPB,\u5C5ESZ,\u5C6CSZ,\u5C6FTZ,\u5C79YG,\u5CD2TD,\u5CD9ZS,\u5CE4JQ,\u5CFFWY,\u5D16YA,\u5D24YX,\u5D4CQK,\u5D51JH,\u5D80TD,\u5DA0JQ,\u5DC2SX,\u5DF7XH,\u5E31CD,\u5E4DDT,\u5E62CZ,\u5E6CCD,\u5E7FGA,\u5E83GA,\u5EACPM,\u5EC8SX,\u5ED1QJ,\u5EE0CA,\u5EE3GA,\u5F04NL,\u5F37QJ,\u5F39DT,\u5F3AQJ,\u5F3EDT,\u5F48DT,\u5F4AQJ,\u5F77PF,\u5F9ECZ,\u5FA5CS,\u5FEAZS,\u6041NR,\u606AKQ,\u606BDT,\u6076EW,\u608AZQ,\u609DKL,\u60AAEW,\u60E1EW,\u6112KQ,\u615DNT,\u61FESZ,\u6206GZ,\u620CXQ,\u620FXH,\u6220SC,\u6227CQ,\u622FXH,\u6232XH,\u6241BP,\u6252BP,\u6255FB,\u625BKG,\u6273BP,\u6298ZS,\u62BBCS,\u62C2FB,\u62D7ANY,\u62ECKG,\u62FDZY,\u630ANL,\u6310RN,\u631DWZ,\u631FXJ,\u6335LN,\u633EXJ,\u637FXQ,\u63B1SP,\u63B8DS,\u63BACS,\u63D0TDS,\u63DFXJ,\u63F2SD,\u6412BP,\u6436QC,\u6461GX,\u647BCS,\u649EZC,\u64A3DS,\u64AECZ,\u64BEZW,\u6505ZC,\u6512ZC,\u6522ZC,\u652AJG,\u655ECT,\u656FHM,\u6581YD,\u6589QJ,\u658AQJ,\u65AAQJ,\u65BCWY,\u65C1PB,\u65E0WM,\u6641CZ,\u6647XK,\u665FSC,\u666FJY,\u66B4BP,\u66DDPB,\u66F3YZ,\u66FDCZ,\u66FECZ,\u6703HK,\u6707PB,\u6718JZ,\u671DCZ,\u671EJQ,\u671FQJ,\u672FSZ,\u6753SB,\u6773YM,\u6777PB,\u677BCN,\u679DZQ,\u679EZC,\u67B8GJ,\u67B9BF,\u67C1TD,\u67C9FB,\u67DCJG,\u67E5CZ,\u67EBFB,\u67FBCZ,\u6805ZS,\u680ELY,\u6816QX,\u6818CY,\u681DGK,\u6821XJ,\u6867GH,\u68D3PB,\u68F2QX,\u6909CS,\u690EZC,\u6911BP,\u6939SZ,\u6940YJ,\u6942ZC,\u695BHK,\u696FSD,\u6977KJ,\u697DLY,\u69A6GH,\u69C7DZ,\u69DBJK,\u69EDQC,\u6A02LY,\u6A05CZ,\u6A17CS,\u6A47QC,\u6A48RN,\u6A66TC,\u6A6DGK,\u6A9CGHK,\u6AAALY,\u6AB7MN,\u6ABBJK,\u6AC3GJ,\u6ADBZJ,\u6ADFLY,\u6B1ALJ,\u6B38EA,\u6B39YQ,\u6B59SX,\u6B96ZS,\u6BA0CX,\u6BBBKQ,\u6BBCKQ,\u6C0FSZ,\u6C5EGH,\u6C64TS,\u6C81QS,\u6C88SC,\u6C8CDZ,\u6C93TD,\u6CCABP,\u6CCCMB,\u6CE2BP,\u6CE3QX,\u6CF7LS,\u6CFALP,\u6D2FQJ,\u6D38GH,\u6D3DQX,\u6D45QJ,\u6D4DHK,\u6D52HX,\u6D5AJX,\u6D63HW,\u6D8CYC,\u6DA1WG,\u6DC6XY,\u6DF2PH,\u6DFAQJ,\u6E11MS,\u6E26WG,\u6E67YC,\u6E6BQJ,\u6E6FTS,\u6E83KH,\u6EAAXQ,\u6EB1ZQ,\u6ECEYX,\u6ED1HG,\u6EDDLS,\u6EF8HX,\u6F06QX,\u6F2FLT,\u6F37KH,\u6F3ACS,\u6F5AXS,\u6F70KH,\u6F82CD,\u6F84CD,\u6FA0MS,\u6FAEKH,\u6FB9DT,\u6FDAYX,\u6FE2ZC,\u6FFBDW,\u7011PB,\u7015BP,\u7027LS,\u7085GJ,\u7094GQ,\u70AEPB,\u70B5TD,\u70F4JT,\u710CQJ,\u710DDT,\u7118DT,\u7121WM,\u712FZC,\u7156NX,\u71FEDT,\u7219RS,\u723FPQB,\u728DJQ,\u7292KD,\u72B4AH,\u72E2HM,\u7308BP,\u7332XH,\u7387LS,\u739AYC,\u739FMW,\u73A2BF,\u73F6TD,\u7436PB,\u74E8JH,\u74E9QW,\u753ADT,\u753CTD,\u755CCX,\u7566QX,\u756AFP,\u758BPSY,\u759FNY,\u7608JZ,\u7615JX,\u7627NY,\u764CAY,\u7658LJ,\u7696WH,\u76DBSC,\u76FEDS,\u7701SX,\u775AYA,\u7765PB,\u77A7QY,\u77BFJQ,\u77C9BP,\u77DCJQG,\u77F2BP,\u77F3SD,\u7809HX,\u7845GH,\u784AWK,\u784CLG,\u78C5BP,\u7912WY,\u7926KG,\u7947ZQ,\u7962MN,\u796DJZ,\u7974GJ,\u7985SC,\u79AACS,\u79B0NM,\u79CDZC,\u79D8MBL,\u7A18JQ,\u7A2EZC,\u7A3DJQ,\u7A4CSW,\u7AA8YX,\u7ACDSG,\u7ACFQGS,\u7AD2QJ,\u7AD3QFZYGS,\u7AD4GS,\u7AD5SFZYG,\u7AE1YGSB,\u7AE2SQ,\u7B60YJ,\u7B74JC,\u7BB7SY,\u7C00ZK,\u7C72XY,\u7C8BCS,\u7C98ZN,\u7CA2ZC,\u7CA5ZY,\u7CB3JG,\u7CD3GY,\u7CFBXJ,\u7D05HG,\u7D07HG,\u7D5CXJ,\u7D63BP,\u7D66GJ,\u7D88TD,\u7DB8LG,\u7DDDJQ,\u7DF6BP,\u7E41FP,\u7E47ZY,\u7E4BXJ,\u7E6BXJ,\u7E70QZ,\u7E73JZ,\u7E7FJK,\u7EA2HG,\u7EA4XQ,\u7EA5HG,\u7EB6LG,\u7ED9JG,\u7EE8TD,\u7F09JQ,\u7F0FBP,\u7F32QSZ,\u7F34JZ,\u7F67LS,\u7F77BP,\u7F86PB,\u7FC7FP,\u7FDFZD,\u8011ZD,\u8019PB,\u80F2HG,\u812FFP,\u8144CZ,\u814ALX,\u814CAY,\u814FCD,\u815EZD,\u8161GL,\u8180BP,\u81C8LX,\u81D1NR,\u81D8LX,\u81E6GW,\u81EDCX,\u81F0CX,\u822CBP,\u8235DT,\u823AJX,\u825FCT,\u827EAY,\u8292MW,\u8298BP,\u82A5JG,\u82BDYD,\u82CEZN,\u82D0YT,\u82D5TS,\u82E3JQ,\u82E7ZN,\u8304QJ,\u8308ZC,\u831CQX,\u832CCZ,\u8351TY,\u8356LP,\u8360JQ,\u8364HX,\u8365YX,\u8368QX,\u8398XS,\u839EGW,\u83A5NC,\u83A9FP,\u83B4WZ,\u83C0YW,\u8401JQ,\u8415QJ,\u842CWM,\u8439PB,\u8449XYS,\u845ASR,\u8477HX,\u84A1BP,\u84CBGH,\u84F2QO,\u84FFXS,\u8508BP,\u8513MW,\u851AYW,\u8535CZ,\u8541QX,\u8543FB,\u8548XJ,\u8549JQ,\u8593SC,\u859FLX,\u85BAQJ,\u85CFZC,\u85D3XL,\u85F7ZS,\u8601WE,\u8617BN,\u861AXL,\u866BCH,\u8675SY,\u8679HJ,\u867EXH,\u8694QC,\u8695CT,\u86B5HK,\u86C6QJ,\u86C7SY,\u86E4HG,\u86F8SX,\u86FBTS,\u86FEEY,\u8721LZ,\u874BLZ,\u874EXH,\u8764YQ,\u8766XH,\u8777LX,\u8778GW,\u87ABSZ,\u87EFRN,\u881FLZ,\u884CXH,\u8853SZ,\u8870SC,\u8879QZ,\u889ABF,\u88ABBP,\u88B7JQ,\u88E8BP,\u88F3SC,\u88FCTX,\u890CKH,\u891ACZ,\u8936ZX,\u8983TQ,\u898BJX,\u8998ZC,\u89C1JX,\u89E3JX,\u89E7JX,\u8A31XH,\u8A58CQ,\u8A82TD,\u8AAASY,\u8AACSY,\u8ABFDT,\u8B0FXS,\u8B14NX,\u8B1ASY,\u8B56JZ,\u8B58SZ,\u8BC6SZ,\u8BF4SY,\u8BF6EA,\u8C03DT,\u8C2EJZ,\u8C37GY,\u8C3FQX,\u8C48QK,\u8C4AFL,\u8C7BHA,\u8C89HM,\u8CC3LR,\u8CC8JG,\u8CDCSC,\u8D3EJG,\u8D84JQ,\u8DA3QC,\u8DA8QC,\u8DB3ZJ,\u8DE9ZS,\u8E4AXQ,\u8E62DZ,\u8E63MP,\u8E72DC,\u8EABSJ,\u8ECACJ,\u8ECBYZG,\u8EF5RF,\u8F4DCZ,\u8F66CJ,\u8F67YZG,\u8F9FPB,\u9002SK,\u904DBP,\u9057YW,\u9069SK,\u907AYW,\u9084HX,\u90AAXY,\u90C7XH,\u9156DZ,\u9162ZC,\u9166FP,\u9175JX,\u9197FP,\u91B1FP,\u91CDZC,\u91D0LX,\u9200BP,\u923FDT,\u9248ST,\u925ALM,\u925BQY,\u927FJH,\u929AYDT,\u92CCTD,\u9312AE,\u93ACHG,\u93C3ZC,\u9414TCX,\u943ADC,\u9441DZ,\u9443DY,\u94AFBP,\u94BFDT,\u94C5QY,\u94CATS,\u94DBDC,\u94E4TD,\u94EBYDT,\u9550HG,\u9561CXT,\u9577CZ,\u9578CZ,\u957FZC,\u95A4HG,\u95BAMW,\u95BCEY,\u95CDDS,\u95D2DT,\u95DEKH,\u95E2PB,\u9607DS,\u960FYE,\u9618DT,\u961AKH,\u961DFY,\u9620XS,\u963DDY,\u963FAE,\u9642PB,\u964DJX,\u965DSX,\u9676TY,\u9697WK,\u96B9ZC,\u96BCSZ,\u96FDHY,\u9719YJ,\u9730XS,\u9743HS,\u9753JL,\u975AJL,\u9766TM,\u9769GJ,\u9781BT,\u9794MW,\u9798QS,\u97A5YE,\u97FDYA,\u981AJG,\u9821JX,\u9838JG,\u986BZC,\u9888JG,\u9889JX,\u988CHG,\u98A4ZC,\u98DFSY,\u9933XT,\u9939TX,\u9967XT,\u99AEFP,\u99B1TD,\u99C4TD,\u99EDHX,\u9A0EQJ,\u9A14JG,\u9A43PB,\u9A6ETD,\u9A80TD,\u9AA0PB,\u9AA3ZC,\u9AB0TS,\u9AB1JX,\u9ADFBS,\u9B32LG,\u9B44PTB,\u9B7AHG,\u9BADGX,\u9BD6QZ,\u9C13SX,\u9C15HX,\u9C91GX,\u9CADQZ,\u9D1FCZ,\u9D60HG,\u9DA3PB,\u9DA9MW,\u9DBBGH,\u9DC1YN,\u9DC5LP,\u9E1FND,\u9E44HG,\u9E58GH,\u9E87JQ,\u9E89JQ,\u9E8FJQ,\u9E95JQ,\u9EB6CL,\u9ED0CL,\u9EE5QJ,\u9F13GH,\u9F3DYQ,\u9F4AQZ,\u9F4DZJ,\u9F50QJ,\u9F66YK,\u9F88YK,\u9F9CGJQ,\u9F9FGJQ',
      wbm: ''
    }


  };

  // ex $
  // ---------------------------------------------------------------------------
  $.extend({
    maxzIndex: 33554431,

    isBoolean: $.isBool || $.isBoolean || function(s) {
      return typeof (s) === 'boolean';
    },

    isString: $.isString || function(s) {
      return typeof (s) === 'string';
    },

    isNumber: $.isNumber || function(n) {
      return typeof (n) === 'number' && !isNaN(n);
    },

    isStrOrNum: $.isStrOrNum || function(p) {
      return $.isString(p) || $.isNumber(p);
    },

    isjQuery: $.isjQuery || function(q) {
      return q instanceof jQuery;
    },

    nameCollection: $.nameCollection || function(o) {
      var rt = [];
      for (var n in o) rt.push(n);
      return rt;
    },

    valueCollection: $.valueCollection || function(o) {
      var rt = [];
      for (var n in o) rt.push(o[n]);
      return rt;
    },

    nameValueCollection: $.nameValueCollection || function(o) {
      var rt = [];
      for (var n in o) rt.push({ name: n, value: o[n] });
      return rt;
    },

    // 枚举对象的成员，无论对象是否有 length。
    // 枚举带有 length 属性的对象时，使用 $.each 无效，需要借助此方法。
    objectEach: $.objectEach || function(obj, callback, args) {
      if (obj == null || !$.isFunction(callback)) return obj;

      var v, n;

      if (args != null) {
        args = $.makeArray(args);
        for (n in obj) if (callback.apply(obj[n], args) === false) break;
      } else for (n in obj) {
        v = obj[n];
        if (callback.call(v, n, v) === false) break;
      }

      return obj;
    }

  });

  // string trim helper.
  // ---------------------------------------------------------------------------
  // trimType: 0 ltrim, 1 rtrim, other trim.
  var trimHelper = function(s, trimChars, trimType) {
    if (s == '') return '';

    if ($.isString(trimChars)) {
      // no trim char, no trim.
      if (trimChars == '') return s;

      trimChars = trimChars.split('');
    }
    else {
      if (!$.isArray(trimChars) || !trimChars.isChars()) {
        if (trimType == 0) return s.replace(/^\s+/g, '');
        if (trimType == 1) return s.replace(/\s+$/g, '');
        return $.trim(s);
      }
    }

    var i = 0, t = s.length - 1;

    // ltrim or trim
    if (trimType != 1) for (; i < s.length; i++)
      if ($.inArray(s.charAt(i), trimChars) < 0) break;

    if (i == s.length) return '';

    // rtrim or trim
    if (trimType != 0) for (; t >= i; t--)
      if ($.inArray(s.charAt(t), trimChars) < 0) break;

    return s.substring(i, t + 1);
  };

  var mutiInitial = function(c) {
    var rt = [], i, a = [];
    for (i = 0; i < c.length; i++) a.push(c[i].length);
    a = $.math.cx(a);
    for (i = 0; i < a.length; i++) {
      rt[i] = '';
      for (j = 0; j < a[i].length; j++) rt[i] += c[j].charAt(a[i][j]);
    }
    return rt;
  };

  // string initial helper
  // ---------------------------------------------------------------------------
  var initialHelper = function(s, type, muti) {
    var rt, i, getAi = function(xc) {
      var xj = xc.charCodeAt(0) - 19968, xidx = -1;

      return xj >= 0 && xj < defaults.Initial[type].length ?
        defaults.Initial[type].charAt(xj) :
        (xidx = defaults.Initial[type + 'x'][0].indexOf(xc), xidx >= 0) ?
        defaults.Initial[type + 'x'][1].charAt(xidx) : xc;
    };

    if (muti) {
      var c, idx, x = defaults.Initial[type + 'm'];

      rt = [];
      for (i = 0; i < s.length; i++) {
        c = s.charAt(i);
        idx = x.indexOf(c);
        if (idx >= 0) {
          c = x.substr(idx + 1);
          rt.push(c.substr(0, c.indexOf(',')));
        } else {
          rt.push(getAi(c));
        }
      }

      return mutiInitial(rt);
    } else {
      rt = '';
      for (i = 0; i < s.length; i++) rt += getAi(s.charAt(i));
      return rt.toUpperCase();
    }
  };

  // ex string
  // ---------------------------------------------------------------------------
  $.extend(String.prototype, {

    padLeft: function(len, c) {
      if (!$.isNumber(len) || len <= this.length) return this;
      c = $.isString(c) && c.length == 1 ? c : ' ';
      return c.times(len - this.length) + this;
    },

    padRight: function(len, c) {
      if (!$.isNumber(len) || len <= this.length) return this;
      c = $.isString(c) && c.length == 1 ? c : ' ';
      return this + c.times(len - this.length);
    },

    startsWith: function(s) {
      if (!$.isString(s)) return false;

      return this.indexOf(s) === 0;
    },

    endsWith: function(s) {
      if (!$.isString(s)) return false;

      var d = this.length - s.length;
      return d >= 0 && this.lastIndexOf(s) === d;
    },

    // s is string or string[], contain all.
    contains: function(s) {
      if ($.isString(s)) return this.indexOf(s) > -1;
      if (!$.isArray(s) || !s.isStrings()) return false;

      for (var i = 0; i < s.length; i++)
        if (!this.contains(s[i])) return false;

      return true;
    },

    // chars is string or string[]
    containAny: function(chars) {
      if ($.isString(chars)) chars = chars.split('');
      if (!$.isArray(chars) || !chars.isStrings()) return false;

      for (var i = 0; i < chars.length; i++)
        if (this.contains(chars[i])) return true;

      return false;
    },

    // chars is string or char[]
    containAnyExcludes: function(chars) {
      if (this == '') return false;
      if ($.isString(chars)) chars = chars.split('');
      if (!$.isArray(chars) || !chars.isChars()) return true;

      for (var i = 0; i < this.length; i++)
        if ($.inArray(this.charAt(i), chars) < 0) return true;

      return false;
    },

    htmlEncode: function() {
      return $('<span/>').text(this.toString()).html().replace(/'/g, '&#39;').replace(/"/g, '&quot;');
    },

    py: function(muti) {
      return initialHelper(this, 'py', muti);
    },

    wb: function(muti) {
      return initialHelper(this, 'wb', muti);
    },

    // trim like c#
    trim: function(c) {
      return trimHelper(this, c, 2);
    },

    // trim start like c#
    ltrim: function(c) {
      return trimHelper(this, c, 0);
    },

    // trim end like c#
    rtrim: function(c) {
      return trimHelper(this, c, 1);
    },

    times: function(c) {
      return new Array(c + 1).join(this);
    },

    shuffling: function() {
      var rt = '', i = 0;
      rt += String.fromCharCode($.math.shuffling($.math.random(48, 122)));
      rt += String.fromCharCode($.math.shuffling(this.length + 48));

      for (; i < this.length; i++)
        rt += String.fromCharCode($.math.shuffling(this.charCodeAt(i)));

      for (i = 0; i < 10 - this.length; i++)
        rt += String.fromCharCode($.math.shuffling($.math.random(48, 122)));

      return rt;
    }

  });

  $.extend(String, {

    // 类 c# Format。format 串不合法时可能抛出违例
    // 格式项的语法是 {索引[,对齐方式][:格式字符串]}
    // 目前，[:格式字符串] 会被忽略
    // { 和 } 采用成双转义，即“{{”和“}}”。
    // -------------------------------------------------------------------------
    format: function(format, args) {
      if (format == null) return null;
      if (args == null) return format;

      var a = [];
      for (var i = 1; i < arguments.length; i++)
        $.merge(a, $.isArray(arguments[i]) ? arguments[i] : [arguments[i]]);

      var rt = '', num3,
     chArray = format.split(''),
       index = 0,
      length = chArray.length,
          ch = '\0', FormatError = function() { throw 'Format Error'; };

      while (true) {
        num3 = index;
        var num4 = index;

        while (index < length) {
          ch = chArray[index];
          index++;

          if (ch == '}') {
            if ((index < length) && (chArray[index] == '}')) index++;
            else FormatError();
          }

          if (ch == '{') {
            if ((index < length) && (chArray[index] == '{')) index++;
            else { index--; break; }
          }

          chArray[num4++] = ch;
        }

        if (num4 > num3) {
          rt += $.grep(chArray, function(n, i) {
            return i >= num3 && i < num4;
          }).join('');
        }

        if (index == length) return rt;

        index++;
        if (((index == length) || ((ch = chArray[index]) < '0'))
          || (ch > '9')) FormatError();

        var num5 = 0;

        do {
          num5 = ((num5 * 10) + ch.charCodeAt(0)) - 0x30;
          index++;

          if (index == length) FormatError();

          ch = chArray[index];
        }
        while (((ch >= '0') && (ch <= '9')) && (num5 < 0xf4240));

        if (num5 >= a.length) throw 'Format IndexOutOfRange';

        while ((index < length) && ((ch = chArray[index]) == ' '))
          index++;

        var flag = false,
            num6 = 0;

        if (ch == ',') {
          index++;

          while ((index < length) && (chArray[index] == ' ')) index++;
          if (index == length) FormatError();

          ch = chArray[index];

          if (ch == '-') {
            flag = true;
            index++;

            if (index == length) FormatError();

            ch = chArray[index];
          }

          if ((ch < '0') || (ch > '9')) FormatError();

          do {
            num6 = ((num6 * 10) + ch.charCodeAt(0)) - 0x30;
            index++;

            if (index == length) FormatError();

            ch = chArray[index];
          }
          while (((ch >= '0') && (ch <= '9')) && (num6 < 0xf4240));
        }

        while ((index < length) && ((ch = chArray[index]) == ' '))
          index++;

        var arg = a[num5],
            str = null;

        if (ch == ':') {
          index++;
          num3 = index;
          num4 = index;

          while (true) {
            if (index == length) FormatError();

            ch = chArray[index];
            index++;
            var tob = false;

            switch (ch) {
              case '{':
                if ((index < length) && (chArray[index] == '{')) index++;
                else FormatError();
                break;

              case '}':
                if ((index < length) && (chArray[index] == '}')) index++;
                else {
                  index--;
                  if (num4 > num3) {
                    str = $.grep(chArray, function(n, i) {
                      return i >= num3 && i < num4;
                    }).join('');
                  }
                  tob = true;
                }
                break;
            }

            if (tob) break;
            chArray[num4++] = ch;
          }
        }

        if (ch != '}') FormatError();

        index++;
        var str2 = null;

        if (arg != null) str2 = arg.toString();
        if (str2 == null) str2 = '';

        var repeatCount = num6 - str2.length;

        if (!flag && (repeatCount > 0)) rt += ' '.times(repeatCount);

        rt += str2;

        if (flag && (repeatCount > 0)) rt += ' '.times(repeatCount);
      }

      return rt;
    }
  });

  // extend Array
  // ---------------------------------------------------------------------------
  $.extend(Array.prototype, {

    // 是否为字符数组
    isChars: function() {
      if (this.length == 0) return false;

      for (var j; j < this.length; j++)
        if (!$.isString(this[j]) || this[j].length != 1) return false;

      return true;
    },

    // 是否为字符串数组
    isStrings: function() {
      if (this.length == 0) return false;

      for (var j; j < this.length; j++)
        if (!$.isString(this[j])) return false;

      return true;
    }

  });

  $.extend(Number.prototype, {

    round: function(decimals) {
      !$.isNumber(decimals) || decimals < 0 && (decimals = 0);

      var rt = this < 0 ? -this : this;

      if (decimals > 0) {
        decimals = Math.pow(10, decimals);
        rt = Math.round(rt * decimals) / decimals;
      } else rt = Math.round(rt);

      return this < 0 ? -rt : rt;
    },

    ceil: function(decimals) {
      !$.isNumber(decimals) || decimals < 0 && (decimals = 0);

      if (decimals > 0) {
        decimals = Math.pow(10, decimals);
        return Math.ceil(this * decimals) / decimals;
      } else return Math.ceil(this);
    },

    floor: function(decimals) {
      !$.isNumber(decimals) || decimals < 0 && (decimals = 0);

      if (decimals > 0) {
        decimals = Math.pow(10, decimals);
        return Math.floor(this * decimals) / decimals;
      } else return Math.floor(this);
    }

  });

  //
  // rchis.
  // ---------------------------------------------------------------------------
  //
  $.rchis = $.rchis || {};

  //
  // $.rchis.msg.
  // ---------------------------------------------------------------------------
  //
  $.rchis.msg = $.rchis.msg || function(e, s) {
    return ($.isStrOrNum(e) && $.rchis.msg.e[e.toString()] || '') + '- ' +
           ($.isStrOrNum(s) && s + ' ' + ($.rchis.msg.s[s.toString()] || ''));
  };

  $.extend($.rchis.msg, defaults.msg);

  $.each(['e', 's'], function(i, x) {
    var ux = x.toUpperCase();
    $.each($.rchis.msg[x], function(n, v) {
      $.rchis.msg[ux + n] = $.rchis.msg[x + n] = v;
    });
    $.rchis.msg[ux] = $.rchis.msg[x];
  });
  // end $.rchis.msg


  //
  // $.rchis.IdCardLastBit
  // 计算身份证号码的校验位，此方法不验证身份证号码是否合法
  // id 长度小于17且不等于15或前17位存在非数字字符时返回空字符串 ''
  // ---------------------------------------------------------------------------
  //
  $.rchis.IdCardLastBit = function(id) {
    var s = id + '',
          r = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'],
          v = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
          n = 0;

    if (s.length == 15) s = s.substr(0, 6) + '19' + s.substr(6);
    else if (s.length >= 17) s = s.substr(0, 17);
    else return '';

    for (var i = 0; i < 17; i++) {
      var x = parseInt(s.charAt(i));
      if (!$.isNumber(x)) return '';
      n += x * v[i];
    }

    return r[n % 11];
  };
  // end $.rchis.IdCardLastBit


  //
  // EnterQueue
  // ---------------------------------------------------------------------------
  var EnterQueue = {};

  $.extend(EnterQueue, {

    clear: function() {
      EnterQueue.remove();
    },

    remove: function(index) {
      if (($.isBoolean(index) && index) || (!$.isNumber(index) && !index)) {
        defaults.enterQueue.data = [];
        return;
      }

      if (!$.isNumber(index)) {
        index = EnterQueue.indexOf(index);
        if (index < 0) return;
      }

      defaults.enterQueue.data.splice(index, 1);
    },

    indexOf: function(elem) {
      return $.inArray(elem, defaults.enterQueue.data);
    },

    enterQueueKeypress: function(d, event) {

      if (event.which != defaults.enterQueue.keyCode.R &&
            event.which != defaults.enterQueue.keyCode.N) return;

      var idx = EnterQueue.indexOf(this), last = true, me = $(this),
            l = defaults.enterQueue.data.length;

      if (idx < 0) return;
      idx += (event.shiftKey ? -1 : 1);

      while (event.shiftKey ? 0 <= idx : l > idx) {

        var nxt = $(defaults.enterQueue.data[idx]);
        event.shiftKey ? idx-- : idx++;

        if (nxt.is(':input:not(:hidden),a:enabled:visible')) {

          // 控件有属性 enterQueue_ignore 则不受 EnterQueue 控制
          var eqignore = nxt.attr('enterQueue_ignore') == '1'
                      || nxt.attr('enterQueue_ignore') == 'true'
                      || nxt.attr('enterQueue_ignore') == '';

          if (eqignore) continue;

          if (event.shiftKey || !me.is('textarea') || event.metaKey) {

            // 控件有属性 enterQueue_stop 则在此控件处不继续前进, 
            // 并有机会触发此控件的 keypress 事件
            var eqstop = me.attr('enterQueue_stop') == '1'
                      || me.attr('enterQueue_stop') == 'true'
                      || me.attr('enterQueue_stop') == '';

            if (!eqstop) {
              // focus next.
              nxt.focus();

              var f = me.parents('form');
              f = (f > 0 ? f : $(document)).find(':submit,:image');

              // Prevent default event, if it isn't exists ':submit' and ':image'.
              if (f.length > 0 || me
              .is(':not(a,:image,:file,:submit,:reset,:button)')) {
                event.preventDefault();
                event.stopPropagation();
                return false;
              }

            }

          }
          last = false;
          break;
        }
      }

      if (last) EnterQueue.lastEnterCallback.call(this);

    },

    insert: function(elem, position) {
      defaults.enterQueue.data.splice($.isNumber(position)
        ? position : defaults.enterQueue.data.length, 0, elem);
    }

  });

  //
  // $.rchis.enterQueue.
  // ---------------------------------------------------------------------------
  //
  $.extend($.rchis, {
    enterQueue: $.rchis.enterQueue ||
    function(sel, position, lastEnterCallback) {
      if ($.isFunction(position)) {
        lastEnterCallback = position;
      }

      if (!$.isFunction(lastEnterCallback)) {
        lastEnterCallback = function() { };
      }

      if ($.isArray(sel)) {
        if (!$.isNumber(position)) {
          position = defaults.enterQueue.data.length;
        }

        $.each(sel, function(i, v) {
          $.rchis.enterQueue(v, position + i, lastEnterCallback);
        });
        return;
      }

      $(sel).each(function() {
        if (!this.nodeType) return true;

        // 控件有属性 enterQueue_ignore 则不受 EnterQueue 控制
        // var eqignore = $(this).attr('enterQueue_ignore') == '1' || $(this).attr('enterQueue_ignore') == 'true' || $(this).attr('enterQueue_ignore') == '';
        // if (eqignore) return true;

        EnterQueue.lastEnterCallback = lastEnterCallback;

        if (EnterQueue.indexOf(this) >= 0) {
          EnterQueue.remove(this);
          EnterQueue.insert(this, position);
          return true;
        }

        EnterQueue.insert(this, position);

        $(this).unbind('enterQueueKeypress')
             .bind('enterQueueKeypress', EnterQueue.enterQueueKeypress)
             .bind('keypress', function(event) {
               $(this).trigger('enterQueueKeypress', event);
             });

      });
    },

    // $.rchis.removeEnterQueue.
    // -------------------------------------------------------------------------
    //
    removeEnterQueue: $.rchis.removeEnterQueue || function(sel) {
      if (!sel) {
        EnterQueue.clear();
        return;
      }

      $(sel).each(function() {
        EnterQueue.remove(this);
      });
    },

    // $.rchis.enterQueueIndexOf.
    // -------------------------------------------------------------------------
    //
    enterQueueIndexOf: $.rchis.enterQueueIndexOf || function(elem) {
      if ($(elem).length < 1) return -1;
      return EnterQueue.indexOf($(elem)[0]);
    }
  });

  // ex $.fn
  $.extend($.fn, {

    showMessage: $.fn.showMessage || function(msg) {
      if (!$.isString(msg)) return this;

      $(this).css({ color: 'red', overflow: 'hidden' }).html(msg);

      //      $(this).stop(true, true).css({ color: 'red', overflow: 'hidden' })
      //        .html(msg).fadeIn(0).fadeOut(32000);

      return this;
    },
    // 对 body html 等标签无效
    outerHTML: $.fn.outerHTML || function() {
      return this.clone().wrap('<div></div>').parent().html();
    },

    // Appends elements to a queue.
    // Press ENTER at one, focus on next.(in TEXTAREA, need to press CTRL+ENTER)
    // Press SHIFT+ENTER, focus on prev.
    // -------------------------------------------------------------------------
    enterQueue: $.fn.enterQueue || function(position, lastEnterCallback) {
      $.rchis.enterQueue(this, position, lastEnterCallback);

      return this;
    },

    enterQueueIndexOf: $.fn.enterQueueIndexOf || function() {
      return $.rchis.enterQueueIndexOf(this);
    },

    removeEnterQueue: $.fn.removeEnterQueue || function() {
      $.rchis.removeEnterQueue(this);

      return this;
    },

    // force input[type=text] value is number.
    // -------------------------------------------------------------------------
    // options contains: scale(decimal place, default 0),
    // min(default 0), max(default 18446744073709551615).
    forceNumber: $.fn.forceNumber || function(options) {
      var ss = $.extend({}, $.isNumber(options) ? { scale: options} : options),
          s = {}, keycode = [];

      arguments.length > 1 &&
        $.isNumber(arguments[1]) && (ss.min = arguments[1]);

      arguments.length > 2 &&
        $.isNumber(arguments[2]) && (ss.max = arguments[2]);

      $.each(defaults.forceNumber.keyCode, function(n, v) {
        keycode[keycode.length] = v;
      });

      $(this).each(function() {
        var me = $(this);

        if ($.nodeName(me[0], 'input') && me.attr('type') === 'text') {
          me.unbind('forceNumberInput forceNumberKeydown forceNumberBlur');
          me.unbind('contextmenu');

          var cals = function() {
            s = $.extend({}, defaults.forceNumber.options, {
              min: me.attr('min'), max: me.attr('max'), scale: me.attr('scale')
            }, ss);

            if (!$.isNumber(s.min)) s.min = defaults.forceNumber.options.min;
            if (!$.isNumber(s.max)) s.max = defaults.forceNumber.options.max;

            if (s.min > s.max) { var x = s.min; s.min = s.max; s.max = x; }
            s.min = Math.max(s.min, -defaults.forceNumber.options.max);
            s.max = Math.min(s.max, defaults.forceNumber.options.max);
            
            if (s.scale > 0) {
              s.min = s.min.ceil(s.scale);
              s.max = s.max.floor(s.scale);
            }
          };

          me.bind('forceNumberInput', function(d, event) {
            cals();

            var os = me.val();

            if (os.length > 1 && os.startsWith('0') && !os.startsWith('0.'))
              os = me.val(os.substr(1)).val();

            if (os.length > 2 && os.startsWith('-0') && !os.startsWith('-0.'))
              os = me.val('-' + os.substr(2)).val();

            if (os.startsWith('.')) me.val('0' + os);
            if (os.startsWith('-.')) me.val('-0' + os.substr(1));

            var oldv = me.data('oldVal') || '';

            var si = os.indexOf('.'),
                ei = os.lastIndexOf('.'),
                ni = os.lastIndexOf('-');

            if ((s.scale < 1 && si >= 0)            // period(.)
              || ((s.scale > 0) &&                  // ...
                  (si != ei || (ei >= 0 &&          // ...
                   ei < os.length - 1 - s.scale)))  // ...
              || ni > 0 || (s.min >= 0 && ni == 0)  // subtract(-)
              || os.containAnyExcludes(             // invalid chars
                 defaults.forceNumber.validChars)) { // ...
              me.val(oldv);
            }

            os = me.val();

            if (os != '-') {
              if (os.startsWith('-')) (parseFloat(os) < s.min && me.val(s.min));
              else (parseFloat(os) > s.max && me.val(s.max));
//              (parseFloat(os) < s.min && me.val(s.min));
//              si = os.indexOf('.');
//              var n = si > 0 ? os.length - 2 : 0;
//              //alert(parseFloat(s.min.toFixed(n)));
//              ((parseFloat(os) || 0) < parseFloat(s.min.floor(n)) && me.val(oldv));
            }

            me.data('oldVal', me.val());
          });

          me.bind('forceNumberBlur', function() {
            cals();

            var os = $(this).val();

            if (os == '') {
            }
            else if (os == '-') {
              $(this).val(s.min > 0 ? s.min : s.max < 0 ? s.max : '0');
            }else {
              $(this).val(os < s.min ? s.min : os > s.max ? s.max : os);
            }

            $(this).data('oldVal', $(this).val());
          });

          me.bind('forceNumberKeydown', function(d, event) {
            cals();

            var k = event.which;

            if (((k < 48 || (k > 57 && k < 96) || k > 105) &&
                  $.inArray(k, keycode) < 0 &&
                  k != defaults.forceNumber.keyCode.ENTER &&
                !(event.metaKey &&
                 (k == 65 ||                  // Ctrl+A
                  k == 88 ||                  // Ctrl+X
                  k == 67 ||                  // Ctrl+C
                  k == 90 ||                  // Ctrl+Z
                  k == 86)) &&                // Ctrl+V
                !(event.shiftKey && k == 45)) // Shift+Ins
              || // period(.)
                ((k == defaults.forceNumber.keyCode.PERIOD) &&
                 (s.scale < 1 || me.val().contains('.')))
              || // subtract(-)
                ((k == defaults.forceNumber.keyCode.SUBTRACT ||
                  k == defaults.forceNumber.keyCode.NUMPAD_SUBTRACT) &&
                 (s.min >= 0 || me.val().contains('-')))) {
              event.preventDefault();
              event.stopPropagation();
              return false;
            }
          }); // end of keydown

          me.bind('keyup focus', function(event) {
            $(this).trigger('forceNumberInput', [event]);
          });

          me.keydown(function(event) {
            cals();
            $(this).trigger('forceNumberKeydown', [event]);
          });

          me.bind('blur', function(event) {
            $(this).trigger('forceNumberBlur', [event]);
          });

          me.bind('contextmenu', function() {
            return false;
          });

          me.trigger('forceNumberInput');

        }   // end of if
      }); // end of each

      return this;
    }   // end forceNumber

    //
    // -------------------------------------------------------------------------

  }); // ex $.fn

  //
  // panelize
  // ---------------------------------------------------------------------------
  //
  defaults.panelize = {
    container: 'body',            // Panel 的容器
    border: 'solid 1px #9BBDE8',  // 默认的 Panel 边框
    borderAuto: true,             // 边框是否自动设置
    dir: 'H',                     // 同级 Panel 排列方向: 'H' 横向 'V' 纵向
    spacerD: 10,                  // 同级 Panel 的间距，可用数组表示不同的间距
    maxD: 0,                      // 同级 Panel 总宽或高(由dir确定)的最大值
    d: 1,                         // 同级 Panel 中宽或高(由dir确定)所占的份额
    fixedWidth: 0,                // Panel 的固定宽值，此值大于0时忽略相应的d值
    fixedHeight: 0,               // Panel 的固定高值，此值大于0时忽略相应的d值
    panels: []                    // 递归定义 Panel 对象
  };

  function _parseFloat0(s) {
    var rt = parseFloat(s);
    return $.isNumber(rt) ? rt : 0;
  };

  function _panelizeFixSize(options, iswin) {
    var s = $.extend({}, defaults.panelize, options);

    if (!$.isArray(s.panels) || s.panels.length < 1) return;
    if ($(s.container).length < 1) return;

    var basezIndex = Math.floor($.maxzIndex / 2), zidx = basezIndex;
    if (iswin) {
      $.rchis.panelize.ww = $(window).width();
      $.rchis.panelize.wh = $(window).height();

      if (!$(s.container).css('z-index'))
        $(s.container).css('z-index', basezIndex);
      else {
        zidx = parseInt($(s.container).css('z-index'));
        if (!$.isNumber(zidx)) zidx = basezIndex;
      }
    } else zidx = $(s.container).data('z-index');

    if (!$.isString(s.dir)) s.dir = 'H';
    s.dir = s.dir.toUpperCase();

    s.maxD = parseInt(s.maxD);
    if (!$.isNumber(s.maxD) || s.maxD < 0)
      s.maxD = defaults.panelize.maxD;

    // spacer
    var xSpacerD = s.spacerD;
    s.spacerD = [];

    if ($.isArray(xSpacerD)) {
      if (xSpacerD.length > s.panels.length - 1)
        xSpacerD = xSpacerD.splice(s.panels.length - 1,
          xSpacerD.length - s.panels.length + 1);
      s.spacerD = $.extend([], $.map(xSpacerD, function(v) {
        var rt = parseInt(v);
        if (!$.isNumber(rt) || rt < 0) rt = defaults.panelize.spacerD;
        return rt;
      }));
    }

    xSpacerD = parseInt(xSpacerD);
    if (!$.isNumber(xSpacerD) || xSpacerD < 0)
      xSpacerD = defaults.panelize.spacerD;

    s.spacerD = $.extend($.map(new Array(s.panels.length - 1),
      function() { return xSpacerD; }), s.spacerD);

    var o, p = $(s.container).data('_panelize_offset');
    if (!p) {
      o = $('<div/>'); o.prependTo($(s.container));
      p = o.offset(); o.remove();
    }

    var h = iswin ? $(window).height() - 2 * p.top : $(s.container).height(),
        w = iswin ? $(window).width() - 2 * p.left : $(s.container).width(),
       hf = 0, // 横向缩进值
       vf = 0, // 纵向缩进值
        t = 0, // 宽或高的总份额
     fixD = 0, // 固定长度的总和
       dt = 0, // 宽或高的实际总长度（除去fixD）
   spacer = 0; // 所有同级Panel的间距总值

    $.each(s.spacerD, function(i, v) { spacer += v; });

    // fixD, t
    for (var i = 0; i < s.panels.length; i++) {
      if ((s.dir == 'V' && $.isNumber(s.panels[i].fixedHeight)
       && s.panels[i].fixedHeight > 0 && (fixD += s.panels[i].fixedHeight))
       || (s.dir != 'V' && $.isNumber(s.panels[i].fixedWidth)
       && s.panels[i].fixedWidth > 0 && (fixD += s.panels[i].fixedWidth)))
        continue;

      if (s.panels[i].d) s.panels[i].d = parseFloat(s.panels[i].d);
      else s.panels[i].d = 1;

      if (!$.isNumber(s.panels[i].d) || s.panels[i].d <= 0) s.panels[i].d = 1;

      t += s.panels[i].d;
    }

    if (t <= 0) t = 1;

    w = w > 0 ? w : 0;
    h = h > 0 ? h : 0;

    if (s.dir == 'V') {
      if (s.maxD && h > s.maxD) {
        vf = ((h - s.maxD) / 2).round(0);
        h = s.maxD;
      }
      dt = h - spacer - fixD;
      if (dt < 0) dt = 0;
      h = parseInt(dt / t);  // 单位份额的高度
    } else {
      if (s.maxD && w > s.maxD) {
        hf = ((w - s.maxD) / 2).round(0);
        w = s.maxD;
      }
      dt = w - spacer - fixD;
      if (dt < 0) dt = 0;
      w = parseInt(dt / t);  // 单位份额的宽度
    }

    var tw = 0, // 实际已分配宽度
        th = 0, // 实际已分配高度
        ts = 0; // 已分配的间距

    for (i = 0; i < s.panels.length; i++) {
      o = $(s.panels[i].container);
      if (o.length < 1) continue;

      o.data('z-index', zidx + 1);

      o.css({
        position: 'absolute',
        overflow: 'auto',
        'text-align': 'left',
        'z-index': zidx + 1
      });

      if ($.extend({}, defaults.panelize, s.panels[i]).borderAuto)
        o.css({ 'border': defaults.panelize.border });

      var ww = w, // Panel 的实际宽度
          hh = h, // Panel 的实际高度
        hpad = _parseFloat0(o.css('padding-left')) // Panel 的边框横向占用值
             + _parseFloat0(o.css('padding-right'))
             + _parseFloat0(o.css('border-left-width'))
             + _parseFloat0(o.css('border-right-width')),
        vpad = _parseFloat0(o.css('padding-top'))  // Panel 的边框纵向占用值
             + _parseFloat0(o.css('padding-bottom'))
             + _parseFloat0(o.css('border-top-width'))
             + _parseFloat0(o.css('border-bottom-width'));

      if (s.panels[i].fixedWidth > 0) {
        if (dt + fixD - tw > s.panels[i].fixedWidth) ww = s.panels[i].fixedWidth;
        else ww = dt + fixD - tw;
      }
      if (s.panels[i].fixedHeight > 0) {
        if (dt + fixD - th > s.panels[i].fixedHeight) hh = s.panels[i].fixedHeight;
        else hh = dt + fixD - th;
      }

      if (s.dir == 'V')
        hh = s.panels[i].fixedHeight > 0
           ? hh : i == s.panels.length - 1
           ? dt - (t - s.panels[i].d) * h : s.panels[i].d * h;
      else
        ww = s.panels[i].fixedWidth > 0
           ? ww : i == s.panels.length - 1
           ? dt - (t - s.panels[i].d) * w : s.panels[i].d * w;

      ts += i > 0 ? s.spacerD[i - 1] : 0;

      o.css({
        width: (ww > hpad ? ww - hpad : 0) + 'px',
        height: (hh > vpad ? hh - vpad : 0) + 'px',
        left: hf + p.left + (s.dir == 'V' ? 0 : ts + tw) + 'px',
        top: vf + p.top + (s.dir == 'V' ? ts + th : 0) + 'px'
      });

      if ($.isArray(s.panels[i].panels) && s.panels[i].panels.length > 0) {
        o.data('_panelize_offset', {
          left: hf + p.left + (s.dir == 'V' ? 0 : ts + tw) +
                _parseFloat0(o.css('padding-left')) +
                _parseFloat0(o.css('border-left-width')),
          top: vf + p.top + (s.dir == 'V' ? ts + th : 0) +
               _parseFloat0(o.css('padding-top')) +
               _parseFloat0(o.css('border-top-width'))
        });
        tw += ww; th += hh;
        _panelizeFixSize(s.panels[i]);
      } else {
        tw += ww; th += hh;
      }
    }

  };

  $.extend($.rchis, {
    panelize: function(options) {
      $(window).resize(function() {
        if ($.rchis.panelize.ww > 0 && $.rchis.panelize.wh > 0
         && $.rchis.panelize.ww == $(window).width()
         && $.rchis.panelize.wh == $(window).height()) return;

        if ($.rchis.panelize.resizEnter) return;
        $.rchis.panelize.resizEnter = true;
        if (!$.rchis.panelize.stoped) setTimeout(function() {
          while (!$.rchis.panelize.resizOver);
          $.rchis.panelize.resizEnter = false;
          $.rchis.panelize.resizOver = false;

          _panelizeFixSize(options, true);
          //$('#zinp').val($('#zinp').val() + ',1')

          $.rchis.panelize.resizOver = true;
        }, 160);
      });
      $(function() { $(window).trigger('resize'); });
    }
  });

  $.extend($.rchis.panelize, {
    resizEnter: false,
    resizOver: true,
    stoped: false,
    ww: 0,
    wh: 0,
    stop: function() { $.rchis.panelize.stoped = true; },
    start: function() { $.rchis.panelize.stoped = false; }
  });

  // ---------------------------------------------------------------------------
  // panelize end

  $.extend($.rchis, {
    hasScroll: function(el, a) {
      if ($(el).css('overflow') == 'hidden') { return false; }

      var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',
			has = false;

      if (el[scroll] > 0) { return true; }

      el[scroll] = 1;
      has = (el[scroll] > 0);
      el[scroll] = 0;
      return has;
    }
  });


  // suggest begin
  // ---------------------------------------------------------------------------
  defaults.Suggest = {
    type: 'post',
    dataType: 'json',
    global: false,
    data: {}, // ajax request data

    cache: false,
    mutiPage: false,           // 支持多页否,_pageNo第几页(基于0),_pageCnt共几页
    pageMinWidth: 300,         // 允许多页时的最小宽度
    pagePattern: '{0} / {1}',  // 页码显示模式
    pageHelperMessage: '(+/=/PgDn)向后翻页 (-/PgUp)向前翻页',
    minChars: 1,
    defaultClass: 'ac_results',
    selectedClass: 'ac_over',
    footerClass: 'ac_footer',
    delay: 300,                // 发送 ajax 请求的间隔毫秒数
    onSelect: function() { },  // 可使用三个参数 data,selectedIndex,selectedItem
    formatter:                 // 格式化数据, 返回用来显示在列表中的字符串数组,
      null,                    // 可用一个参数 data, 即 ajax 请求成功得到的数据
    queriable:                 // 判断当前是否允许执行查询
      function() { return true; }
  };

  var _suggest = function(elem, options) {
    if (!this.options) return new _suggest(elem, options);

    this.elem = $(elem);
    this.options = options;
    this.prevQry = this.elem.val();

    var me = this;

    if (!_suggest.list) {
      _suggest.listfooter = $('<div><table cellpadding=0 cellspacing=0 style="width:100%;"><tr><td style="padding-left:5px;"></td><td style="text-align:right;padding-right:5px;">' + me.options.pageHelperMessage + '</td></tr></table></div>');
      $('body').append(_suggest.listfooter.hide().addClass(me.options.footerClass));

      _suggest.list = $('<ul/>');
      $('body').append(_suggest.list.hide().addClass(me.options.defaultClass));
    }

    _suggest.clearTimer();

    me.elem.focus(function() {
      me.elem = $(this);
      if (_suggest.timer) return;

      me.prevQry = '';
      if (me.options.minChars < 1) me.canQuery = true;

      var timerDo = function() {
        if (!me.ajaxStarted) me.ajax();
        _suggest.timer = setTimeout(timerDo, me.options.delay);
      };

      timerDo();
    }).blur(function(event) {
        _suggest.clearTimer();
        setTimeout(function() { me.hideList(); }, me.options.delay);
    }).keydown(function(event) {
      var k = event.which,
       list = _suggest.list;

      if (k == $.keyCode.ESCAPE) {
        event.preventDefault();
        event.stopPropagation();
      }

      if (!list || !list.is(':visible')) return;

      var selected = list.find('.' + me.options.selectedClass), o, st = 0;

      switch (k) {
        case $.keyCode.PAGE_DOWN:
        case $.keyCode.EQUALS:
          if (me.options.mutiPage) {
            if (me.pageNo < me.pageCnt - 1) {
              me.pageNo++;
              //me.prevQry = '';
            }

            event.preventDefault();
            event.stopPropagation();
          }
          break;

        case $.keyCode.PAGE_UP:
        case $.keyCode.SUBTRACT:
          if (me.options.mutiPage) {
            if (me.pageNo > 0) {
              me.pageNo--;
              //me.prevQry = '';
            }

            event.preventDefault();
            event.stopPropagation();
          }
          break;

        case $.keyCode.ENTER:
          me.pageNo = 0;
          if (selected.length > 0) me.selectItem();
          break;

        case $.keyCode.UP:
          //          o = selected.length > 0 && selected[0] != list.find('li:first')[0]
          //            ? selected.prev() : list.find('li:last');

          if (selected.length > 0 && selected[0] != list.find('li:first')[0])
            o = selected.prev();
          else if (selected.length > 0 && me.options.mutiPage && me.pageCnt > 1) {
            if (me.pageNo > 0) me.pageNo--;
            else me.pageNo = me.pageCnt - 1;
            me.iniSelect = -1;
            //me.prevQry = '';
            break;
          } else o = list.find('li:last');

          if (o.length > 0) {
            selected.removeClass(options.selectedClass);
            o.addClass(options.selectedClass);

            me.scrollUp(o);
            //            st = o.parent().scrollTop();

            //            while (o.position().top + o.outerHeight() > o.parent()[0].clientHeight) {
            //              o.parent().scrollTop(st + 10);
            //              if (o.parent().scrollTop() == st) break;
            //              st = o.parent().scrollTop();
            //            }

            //            while (o.position().top < 0 && st > 0) {
            //              o.parent().scrollTop(st - 5);
            //              if (o.parent().scrollTop() == st) break;
            //              st = o.parent().scrollTop();
            //            }
          }
          break;

        case $.keyCode.DOWN:
          //          o = selected.length > 0 && selected[0] != list.find('li:last')[0]
          //            ? selected.next() : list.find('li:first');

          if (selected.length > 0 && selected[0] != list.find('li:last')[0])
            o = selected.next();
          else if (selected.length > 0 && me.options.mutiPage && me.pageCnt > 1) {
            if (me.pageNo < me.pageCnt - 1) me.pageNo++;
            else me.pageNo = 0;
            me.iniSelect = 0;
            //me.prevQry = '';
            break;
          } else o = list.find('li:first');

          if (o.length > 0) {
            selected.removeClass(options.selectedClass);
            o.addClass(options.selectedClass);

            me.scrollDown(o);

            //            st = o.parent().scrollTop();

            //            while (o.position().top < 0 && st > 0) {
            //              o.parent().scrollTop(st - 10);
            //              if (o.parent().scrollTop() == st) break;
            //              st = o.parent().scrollTop();
            //            }

            //            while (o.position().top + o.outerHeight() > o.parent()[0].clientHeight) {
            //              o.parent().scrollTop(st + 5);
            //              if (o.parent().scrollTop() == st) break;
            //              st = o.parent().scrollTop();
            //            }
          }
          break;

        case $.keyCode.ESCAPE:
          me.pageNo = 0;
          me.hideList();
          break;

        default: break;
      }
    }).keyup(function(event) {
      if (me.pageNo != me.prevPageNo) me.canQuery = true;
      if (me.elem.val() != me.prevQry) { me.pageNo = 0; me.canQuery = true; }
    }).keypress(function(event) {
      if (event.which == $.keyCode.ESCAPE) {
        event.preventDefault();
        event.stopPropagation();
      }
    });
  };

  $.extend(_suggest, {
    list: null,
    listfooter: null,
    timer: null,
    clearTimer: function() {
      if (_suggest.timer) {
        clearTimeout(_suggest.timer);
        _suggest.timer = null;
      }
    },
    prototype: {
      elem: null,
      options: {},
      prevQry: '',
      data: {}, // ajax response data
      pageCnt: 1,
      pageNo: 0,
      prevPageNo: 0,
      iniSelect: -2,
      canQuery: false,
      ajaxStarted: false,
      queriable: function() {
        try {
          return _suggest.timer && this.canQuery && this.elem &&
          this.options.queriable.call(this.elem[0]);
        } catch (ex) { alert(ex); return false; }
      },
      hideList: function() {
        if (_suggest.list) _suggest.list.hide();
        if (_suggest.listfooter) _suggest.listfooter.hide();
        this.iniSelect = -2;
      },
      format: function() {
        var s = this.options;

        if ($.isFunction(s.formatter))
          return s.formatter.call(this.elem[0], this.data);
        else return (this.data && this.data['items'] || this.data['Items']) ||
          this.data;
      },
      scrollUp: function(o) {
        var st = o.parent().scrollTop();

        while (o.position().top + o.outerHeight() > o.parent()[0].clientHeight) {
          o.parent().scrollTop(st + 10);
          if (o.parent().scrollTop() == st) break;
          st = o.parent().scrollTop();
        }

        while (o.position().top < 0 && st > 0) {
          o.parent().scrollTop(st - 5);
          if (o.parent().scrollTop() == st) break;
          st = o.parent().scrollTop();
        }
      },
      scrollDown: function(o) {
        var st = o.parent().scrollTop();

        while (o.position().top < 0 && st > 0) {
          o.parent().scrollTop(st - 10);
          if (o.parent().scrollTop() == st) break;
          st = o.parent().scrollTop();
        }

        while (o.position().top + o.outerHeight() > o.parent()[0].clientHeight) {
          o.parent().scrollTop(st + 5);
          if (o.parent().scrollTop() == st) break;
          st = o.parent().scrollTop();
        }
      },
      ajax: function() {
        var me = this;

        me.ajaxStarted = true;
        var s = me.options, qry = me.elem.val();

        if (qry.length < s.minChars) {
          me.hideList();
          me.prevQry = qry;
          me.ajaxStarted = false;
          return;
        }

        if ((s.minChars > 0 && qry == me.prevQry && me.pageNo == me.prevPageNo) || !me.queriable()) {
          me.ajaxStarted = false; return;
        }
        me.canQuery = false;
        me.prevQry = qry;
        me.prevPageNo = me.pageNo;

        var dosucc = function(data) {
          me.data = data;

          if (s.mutiPage) {
            var c = data._pageCnt;
            if (!c || c < 1) c = 1;

            if (me.pageNo == 0 || c > 1) me.pageCnt = c;
          }

          me.displayItems(me.format());
        };

        if (s.cache && me.elem.data(qry + '_' + me.pageNo)) {
          dosucc(me.elem.data(qry + '_' + me.pageNo));
          me.ajaxStarted = false;
          return;
        }

        $.ajax({
          global: s.global,
          type: s.type,
          dataType: s.dataType,
          url: s.url,
          data: $.extend(true, s.mutiPage ? { qry: qry, _pageNo: me.pageNo} : { qry: qry },
            $.isFunction(s.data) ? s.data.call(me.elem[0]) : s.data),
          success: function(data) {
            try {
              if (s.cache) me.elem.data(qry + '_' + me.pageNo, data);
              dosucc(data);
            } finally {
              me.ajaxStarted = false;
            }
          },
          error: s.error || function(xhr) {
            var xjson = xhr.getResponseHeader('X-JSON');
            xjson = xjson ? window['eval']('(' + decodeURIComponent(escape(xjson)) + ')') : null;
            if (xjson && xjson.error && xjson.error.errorType && xjson.error.errorType == 1) ;
            else alert($.rchis.msg('001', xhr.status));
            me.ajaxStarted = false;
          }
        });
      },
      displayItems: function(items) {
        _suggest.list.empty().css({ width: 'auto', height: 'auto', left: '0px', top: '0px' });

        if (!$.isArray(items) || items.length < 1) { this.hideList(); return; }

        var me = this,
        //  maxlenthline = 0,
          list = _suggest.list;

        me.maxBytes = 0;

        for (var i = 0; i < items.length; i++) {
          var l = $('<li/>').append(items[i])
          .attr('idx', i).data('idx', i).mouseover(function() {
            list.find('.' + me.options.selectedClass).removeClass(me.options.selectedClass);
            $(this).addClass(me.options.selectedClass);
          }).mousedown(function(e) {
            e.preventDefault();
            e.stopPropagation();

            me.selectItem();
          }), len = 0;

          list.append(l);

          l = l.text();
          for (var j = 0; j < l.length; j++)
            len += l.charCodeAt(j) < 128 ? 1 : 2;

          if (len > me.maxBytes) {
            me.maxBytes = len;
            // maxlenthline = i; 
          }
        }

        //        l = list.find('li').length;
        //        if (l > 0) {
        //          var o = list.find('li:eq(' + maxlenthline + ')'),
        //       selected = list.find('.' + me.options.selectedClass);

        //          if (o.length > 0) {
        //            selected.removeClass(me.options.selectedClass);
        //            o.addClass(me.options.selectedClass);
        //          }
        //        }

        this.showList();
      },
      selectItem: function() {
        var item = _suggest.list.find('.' + this.options.selectedClass);

        this.hideList();
        this.canQuery = false;
        this.elem.val(item.text());

        if ($.isFunction(this.options.onSelect))
          this.options.onSelect.call(this.elem[0],
            this.data, item.data('idx'), item.html());

        this.prevQry = this.elem.val();
        this.canQuery = true;
      },
      showList: function() {
        this.listPosition();
        _suggest.list.show();
        if (this.options.mutiPage) _suggest.listfooter.show();
      },
      listPosition: function() {
        var o = _suggest.list, s = this.options;

        //if (!o.parent().find(':last').is(o.selector)) o.appendTo('body');

        var h = this.elem.outerHeight(true),
        pageh = s.mutiPage ? _suggest.listfooter.outerHeight(true) : 0,
            p = this.elem.offset(),
           fw = _parseFloat0(o.css('border-left-width'))
              + _parseFloat0(o.css('padding-left'))
              + _parseFloat0(o.css('padding-right'))
              + _parseFloat0(o.css('border-right-width')),
           fh = _parseFloat0(o.css('border-top-width'))
              + _parseFloat0(o.css('padding-top'))
              + _parseFloat0(o.css('padding-bottom'))
              + _parseFloat0(o.css('border-bottom-width')),
  ww = wwidth = $(window).width(),
      wheight = $(window).height(),
           hh = Math.floor((wheight - h) / 2 - pageh),
            t = p.top + h,
            l = p.left,
        //     widthfix = 24,
     widthfix = Math.ceil(this.maxBytes / 2) + 20,
    heightfix = 20;

        if (!o.is(':visible')) {
          o.show();
          if (o.outerWidth(true) < ww)
            ww = o.outerWidth(true) + widthfix;
          if (o.outerHeight(true) < hh)
            hh = o.outerHeight(true) + heightfix;
          o.hide();
        } else {
          if (o.outerWidth(true) < ww)
            ww = o.outerWidth(true) + widthfix;
          if (o.outerHeight(true) < hh)
            hh = o.outerHeight(true) + heightfix;
        }

        if (ww > wwidth) ww = wwidth;

        if (ww < fw) ww = fw;
        if (hh < fh) hh = fh;

        if (s.mutiPage && ww - fw < s.pageMinWidth) ww = fw + s.pageMinWidth;

        o.css({
          width: ww - fw + 'px',
          height: hh - fh + 'px',
          'z-index': $.maxzIndex
        });

        if (ww + l > wwidth) l = wwidth - ww;

        if (hh + t + pageh > wheight) {
          t = p.top - hh - pageh;
          if (this.iniSelect < -1) this.iniSelect = -1;
        } else {
          if (this.iniSelect < -1) this.iniSelect = 0;
        }

        o.css({
          top: t + 'px',
          left: l + 'px'
        });

        if (s.mutiPage) _suggest.listfooter.css({
          width: ww - fw + 'px',
          top: t + o.outerHeight(true) + 'px',
          left: l + 'px',
          'z-index': $.maxzIndex
        }).find('td:first')
        //.html(this.pageNo + 1 + " / " + this.pageCnt);
        .html(String.format(s.pagePattern, this.pageNo + 1, this.pageCnt));

        l = o.find('li').length;
        if (l > 0) {
          var oo = o.find('li:eq(' + (this.iniSelect == -1 ? l - 1 : this.iniSelect) + ')'),
        selected = o.find('.' + this.options.selectedClass);

          if (oo.length > 0) {
            selected.removeClass(this.options.selectedClass);
            oo.addClass(this.options.selectedClass);

            if (this.iniSelect == -1) this.scrollDown(oo);
            else this.scrollUp(oo);
          }
        }
      }
    }
  });

  $.extend($.fn, {
    Suggest: function(url, data, onselect, mutipage,minChar) {
      var s = $.extend(true, {}, defaults.Suggest,
      $.isString(url) ? { url: url, data: data, onSelect: onselect, mutiPage: mutipage,minChars:(minChar!=null || minChar!=undefined )?minChar:1} : url);

      $(this).each(function() {
        if (!$(this).is('input[type=text]')) return true;

        $(this).data('_suggest') ||
      $(this).data('_suggest', _suggest($(this), s));
      });

      return this;
    }
  });
  // ---------------------------------------------------------------------------
  // suggest end


  //
  // Add 'reset' method for all objects in rchis.
  // ---------------------------------------------------------------------------
  //
  $.each($.rchis, function(n, v) {
    v.reset = function() {
      $.extend(v, defaults[n] || {});
    };
  });

})(jQuery);

